我有一个名称为password和phone_number的用户模型。在用户创建时我要求提供电子邮件和密码,但我需要在另一个页面上添加一个表单来添加电话号码!
我试过了:
= form_for @user do |f|
= f.label :phone_number
= f.text_field :phone_number
%p.button
= f.submit
问题在于它遇到要求password_reset的用户更新:
users_controller.rb
def update
if current_user
@user = current_user
else
@user = User.find(params[:id])
end
@user.password_hash = nil
if @user.update_attributes(params[:user])
redirect_to @user, :notice => "Password has been changed!"
else
render "edit"
end
end
我该如何解决这个问题?
答案 0 :(得分:3)
您可以根据参数确定更新操作。
def update
if current_user
@user = current_user
else
@user = User.find(params[:id])
end
if params[:user][:password]
# or other actions will save new password?
@user.password_hash = nil
notice = "Password has been changed!"
else
notice = "User profile has been changed!"
end
if @user.update_attributes(params[:user])
redirect_to @user, :notice => notice
else
render "edit"
end
end
答案 1 :(得分:1)
您可以在会话中存储已编辑的电话号码,然后在提交主编辑表单时阅读
答案 2 :(得分:1)
在您的第一个表单上,您可以获得电子邮件和密码的详细信息,当您提交表单时,请不要创建用户记录,而是将电子邮件和密码存储到 flash [:user] = {:email => “给定电子邮件”,:password => “给定密码”} (一旦重定向到下一页,Flash将自动重置,因此对于这种情况,闪存会比会话更好,但如果你想在你的第二张表格上有一个后退选项,那就去会话)然后重定向到你的第二个表格。
在您的第二张表单上,您可以获取电话号码的详细信息以及添加两个隐藏字段电子邮件和密码,您可以从flash [:用户]填写该值]或会话[:用户]。当您提交第二个表单时,您可以创建一个新用户,其中params [:user]应该有电子邮件,密码和phone_number。