我认为之前可能会问过这个问题,但老实说我不知道如何搜索它。
基本上,当我做渲染时: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
答案 0 :(得分:0)
正如评论中所讨论的那样,@ bassneck是正确的 - 在渲染编辑视图时,form_for
调用会查看对象是否持久化(@user.persisted?
)。这在很多情况下都有好处,可以为新视图和编辑视图使用一个表单代码(我通常会有部分_form.html.erb
用于两种情况。)
在你的情况下,它并没有导致所需的行为 - 所以你需要做的是确保你使用相关的用户对象。如果要更新用户,@user
应该是您要更新的对象。