3

我有一个带有名称密码和电话号码的用户模型。在创建用户时,我要求输入电子邮件和密码,但我需要在另一个页面上添加一个表格来添加电话号码!

我试过这个:

= form_for @user do |f|
  = f.label :phone_number
  = f.text_field :phone_number 
  %p.button
    = f.submit

问题在于它遇到了要求密码重置的用户更新:

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

我该如何解决这个问题?

4

3 回答 3

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
于 2013-08-21T05:19:11.600 回答
1

您可以在会话中存储编辑的电话号码,然后在提交主编辑表单时阅读它

于 2013-08-21T05:10:46.533 回答
1

在您的第一个表单上,您可以获得电子邮件和密码的详细信息,当您提交表单时,不要创建用户记录,而是将电子邮件和密码存储到flash[:user]={:email => "given email", :password = > “给定密码”}(Flash 将在重定向到下一页后自动重置,因此在这种情况下,flash 会比 session 更好,但如果您想在第二个表单上有 Back 选项,请转到 session)然后重定向到你的第二种形式。

在您的第二个表单中,您可以获得电话号码的详细信息以及添加两个隐藏字段电子邮件和密码,您可以从 flash[:user] 或 session[:user] 中填写值。当你提交你的第二个表单时,你可以创建一个新用户,你的 params[:user] 应该有电子邮件、密码和电话号码。

于 2013-08-21T05:30:43.407 回答