制作form_for将数据添加到现有模型(rails)

时间:2013-08-21 05:07:07

标签: ruby-on-rails ruby

我有一个名称为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

我该如何解决这个问题?

3 个答案:

答案 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。