Ruby on rails 4 使用Desive和wicked时无法保存用户注册信息
我是rails平台的新手…我在表单中单击register时遇到了保存用户注册信息的问题…我没有收到任何错误,但在检查rails控制台时,所有用户信息都等于零…我不明白为什么。 我的用户步骤控制器代码Ruby on rails 4 使用Desive和wicked时无法保存用户注册信息,ruby-on-rails-4,devise,wicked-gem,Ruby On Rails 4,Devise,Wicked Gem,我是rails平台的新手…我在表单中单击register时遇到了保存用户注册信息的问题…我没有收到任何错误,但在检查rails控制台时,所有用户信息都等于零…我不明白为什么。 我的用户步骤控制器代码 class UserStepsController < ApplicationController include Wicked::Wizard steps :finishing_step def show @user = current_user render_wizard end
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :finishing_step
def show
@user = current_user
render_wizard
end
def update
@user = current_user
if @user.save
redirect_to root_path
else
render_wizard
end
end
def user_params
params.require(:user).permit(:first_name, :middle_name, :last_name, :address_first_line, :address_second_line, :city, :nationality)
end
private
def redirect_to_finish_wizard
redirect_to root_path, notice: "Thanks for signing up."
end
end
下面是用户控制器的代码
class UsersController < ApplicationController
def create
@user = User.new(params[:user])
if @user.save
redirect_to root_path
else
render_wizard
end
end
end
下面是带有用户注册信息的简单表单的代码
<%= form_for User.new, url: wizard_path do |f| %>
<div><%= f.label :first_name, "First Name" %><br />
<%= f.text_field :first_name %></div>
<div><%= f.label :middle_name, "Middle Name" %><br />
<%= f.text_field :middle_name %></div>
<div><%= f.label :last_name, "Last Name" %><br />
<%= f.text_field :last_name %></div>
<div><%= f.label :phone_number, "Phone Number" %><br />
<%= f.text_field :phone_number %></div>
<div><%= f.label :date_of_birth, "Date of Birth" %><br />
<%= f.date_select :date_of_birth, start_year: 1900 %></div>
<div><%= f.label :address_first_line, "Address (first line)" %><br />
<%= f.text_field :address_first_line %></div>
<div><%= f.label :address_second_line, "Address (second line)" %><br />
<%= f.text_field :address_second_line %></div>
<div><%= f.label :city, "City" %><br />
<%= f.text_field :city %></div>
<div><%= f.label :nationality, "Nationality" %><br />
<%= country_select(:user, :nationality, {selected: "UG"}) %></div>
<div>
<%= f.label :avatar %>
<%= f.file_field :avatar %>
</div>
<div>
<%= f.label :terms_of_service, "Agree to Terms of Service" %> <br>
<%= f.check_box :terms_of_service %>
</div>
<%= f.submit "Register", class: "btn btn-primary" %>
<% end %>
如需任何帮助,请提前感谢我认为您的构思有一些错误。 该向导在用户注册后运行。 因此,基本上,您需要先在没有向导的情况下创建用户 创建您的用户 如果您对模型用户使用Desive,那么您已经在某个地方有了一个用户控制器。实际上,如果您使用的是Deviate,那么类UsersController是无用的 因此,如果您想在注册后重定向到向导步骤,则需要覆盖Desive registration controller文档:。 为此,请创建一个新控制器,如下所示:
class RegistrationsController < Devise::RegistrationsController
protected
def after_sign_up_path_for(resource)
user_steps_path(:finishing_step) #add proper route
end
end
添加步骤
邪恶向导的工作原理如下:
-一个控制器,具有2个动作显示和更新
-N个步骤的N个视图1个步骤=1个视图,42个步骤=42个视图
您可以在“操作显示”和“使用步骤更新”中访问当前步骤的名称
渲染向导渲染当前步骤的视图
render_wizard@user呈现下一步视图或当前步骤视图(如果有任何错误)
使用强参数
在控制器中,从不使用用户参数。
因此,在更新操作中,您永远不会使用表单中的参数更新@user。当前用户不为您调用用户参数
另外,save和update_属性之间有很大区别,我认为您希望在更新操作中使用第二个属性
最好将user_参数也放在private部分
控制器的最终形式
我想你的控制器应该是这样的:
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :finishing_step
def show
@user = current_user
render_wizard
end
def update
@user = current_user
if @user.update_attributes(user_params)
# because you only have one step, you don't need render_wizard @user
redirect_to_finish_wizard
else
render_wizard
end
end
private
def user_params
params.require(:user).permit(:first_name, :middle_name, :last_name, :address_first_line, :address_second_line, :city, :nationality)
end
def redirect_to_finish_wizard
redirect_to root_path, notice: "Thanks for signing up."
end
end
看医生
我想你错过了《邪恶博士》中的一些提示。
也许你应该重读一遍。
您的基本设置错误,或者我不理解用户\u步骤\u控制器的重要性。plus@user=user.newparams[:user]真是个坏主意,请查看RailsHanks中的strong_params以获取帮助您的代码是正确的和有用的,尽管我的问题是我想在使用电子邮件和密码注册后使用wicked更新我的用户我想wicked更新其他字段,然后保存第3部分。使用强参数应该可以解决您的问题。在my wicked controllercode def user_params params中执行此步骤。要求:user.permit:first_name、:middle_name、:last_name、:address_first_line、:address_second_line、:city、,:国籍End我意识到无论何时使用user或current_user,我的表单中都会出现一些错误,参数错误不能为零,无论何时使用user。最后,它没有保存,我真的无法确定在我的表单helperIt上使用什么,这并不是因为您定义了将自动触发的方法user_参数。我想你不知道强参数是如何工作的。
class UserStepsController < ApplicationController
include Wicked::Wizard
steps :finishing_step
def show
@user = current_user
render_wizard
end
def update
@user = current_user
if @user.update_attributes(user_params)
# because you only have one step, you don't need render_wizard @user
redirect_to_finish_wizard
else
render_wizard
end
end
private
def user_params
params.require(:user).permit(:first_name, :middle_name, :last_name, :address_first_line, :address_second_line, :city, :nationality)
end
def redirect_to_finish_wizard
redirect_to root_path, notice: "Thanks for signing up."
end
end