开发者

Form_for Gives Wrong Outputs After render :action=>'edit'

开发者 https://www.devze.com 2023-03-15 05:53 出处:网络
I think this question might have been asked before, but I honestly don\'t know how to search for it. Basically, when I do a render :action => \'edit\' in the update action in controller, somehow the

I think this question might have been asked before, but I honestly don't know how to search for it.

Basically, when I do a render :action => 'edit' in the update action in controller, somehow the view outputs the form as if it's a :action => 'new' page.

form_for gave the wrong action and f.submit gave wrong button text (it gave create instead of update)

edit:

relevant parts of controller

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


As discussed in the comments, @bassneck is right - while you are rendering the edit view, the form_for call looks at whether the object is persisted or not (@user.persisted?). This has the benefit in a lot of cases of being able to use one piece of form code for both new and edit views (I'll generally have a partial _form.html.erb that gets used for both situations).

In your case though, it isn't leading to the desired behaviour - so wwhat you need to do is make sure you're using the relevant user object. If you want to update a user, @user should be the object you want to update.

0

精彩评论

暂无评论...
验证码 换一张
取 消