Form_for дает неверные результаты после рендера: action => 'edit' - PullRequest
0 голосов
/ 26 июня 2011

Я думаю, что этот вопрос можно было задавать раньше, но я, честно говоря, не знаю, как его искать.

В основном, когда я выполняю рендер: action => 'edit' в действии обновленияв контроллере каким-то образом представление выводит форму, как если бы это была страница: action => 'new'.

form_for дал неправильное действие, а f.submit дал неверный текст кнопки (он дал create вместо update)

редактировать:

соответствующие части контроллера

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 голосов
/ 26 июня 2011

Как обсуждалось в комментариях, @bassneck прав - во время рендеринга представления редактирования вызов form_for определяет, сохранился ли объект или нет (@user.persisted?).Это дает преимущество во многих случаях возможности использовать один фрагмент кода формы как для новых, так и для редактируемых представлений (обычно у меня будет частичный _form.html.erb, который используется для обеих ситуаций).

Однако в вашем случае это не приводит к желаемому поведению, поэтому вам нужно убедиться, что вы используете соответствующий объект пользователя.Если вы хотите обновить пользователя, @user должен быть объектом, который вы хотите обновить.

...