Ruby on rails 为向现有模型(rails)添加数据制作表单
我有一个用户名、密码和电话号码的用户模型。在创建用户时,我要求提供电子邮件和密码,但我需要在另一个页面上添加电话号码 我试过这个:Ruby on rails 为向现有模型(rails)添加数据制作表单,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个用户名、密码和电话号码的用户模型。在创建用户时,我要求提供电子邮件和密码,但我需要在另一个页面上添加电话号码 我试过这个: = form_for @user do |f| = f.label :phone_number = f.text_field :phone_number %p.button = f.submit 问题在于,它会点击用户更新,要求重置密码: 用户\u控制器.rb def update if current_user @user =
= form_for @user do |f|
= f.label :phone_number
= f.text_field :phone_number
%p.button
= f.submit
问题在于,它会点击用户更新,要求重置密码:
用户\u控制器.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
如何解决此问题?您可以在会话中存储已编辑的电话号码,然后在提交主编辑表单时阅读该号码您可以根据参数决定更新操作
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
在您的第一张表单上,您可以获得电子邮件和密码的详细信息,提交表单时,不要创建用户记录,而是将电子邮件和密码存储到flash[:user]={:email=>“给定电子邮件”,:password=>“给定密码”}(Flash将在重定向到下一页后自动重置,因此在这种情况下,Flash将比session更好,但如果您想在第二个表单上有一个Back选项,请转到session),然后重定向到第二个表单
在第二张表单中,您可以获得电话号码的详细信息,同时添加两个隐藏字段email和password,您可以从flash[:user]或session[:user]中填充值。提交第二张表单时,您可以创建一个新用户,其中包含您的参数[:user]应该有电子邮件、密码和电话号码。我不明白这个问题,是不是更新正确了?密码重置是什么?罗伊!!怎么了lol。是的,密码重置工作正常,但我只是想让它以新的形式添加电话号码。当我提交时,我得到错误“密码不能为空”我想我正在寻找一种方法e用户更新也会在页面上添加电话号码啊,对,然后bigxiang下面的答案应该是正确的:)基本上,当表单包含密码时,它会删除@user.password\u散列,但如果不是,它将是简单的更新\u属性感谢答案。