在渲染后Form_for提供错误的输出:action =>'edit'

时间:2011-06-26 07:22:33

标签: ruby-on-rails view form-for

我认为之前可能会问过这个问题,但老实说我不知道​​如何搜索它。

基本上,当我做渲染时:action =>在控制器的更新操作中“编辑”,以某种方式视图输出表单,好像它是a:action => '新'页面。

form_for给出了错误的操作,并且f.submit给出了错误的按钮文本(它给了create而不是更新)

编辑:

控制器的相关部分

def edit
  @user = User.find_by_email(current_user.email)
end

def update
  old_password=params[:user].delete(:old_password)
  @user=User.new(params[:user])

  if User.find_by_email(@user.email).valid_password?(old_password)
    logger.info 'Valid old password'
  else
    flash[:notice]='Invalid current password'
    render :action=>'edit'
  end
end

1 个答案:

答案 0 :(得分:0)

正如评论中所讨论的那样,@ bassneck是正确的 - 在渲染编辑视图时,form_for调用会查看对象是否持久化(@user.persisted?)。这在很多情况下都有好处,可以为新视图和编辑视图使用一个表单代码(我通常会有部分_form.html.erb用于两种情况。)

在你的情况下,它并没有导致所需的行为 - 所以你需要做的是确保你使用相关的用户对象。如果要更新用户,@user应该是您要更新的对象。