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属性感谢答案。