0

コントローラに、を介してオブジェクトをaccount_settings更新するフォームがあります。エラーメッセージが通過していません。コードを見てみましょう。userusers_controller

account_settings / account.html.haml

= form_for @user, :url => { :controller => "users", :action => "update", :id => @user.id } do |f|
  - if @user.errors.any?
    .alert.alert-error
      %h4
        Please address the following errors:
      %ul
        - @user.errors.full_messages.each do |msg|
          %li= msg
  form stuff...

account_settings_controller

def account
  @user = current_user
end

users_controller

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:notice] = "User was successfully updated."
  end
  redirect_to :back
end

フォームは更新されませんが、返されるエラーメッセージはありません。何かご意見は?

4

1 に答える 1

1

これは、リダイレクトを返すために発生します。オブジェクトは@userリダイレクト全体で持続しません。次のようなことをする必要があります。

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user])
    flash[:notice] = "User was successfully updated."
    redirect_to :back
  else
    render :edit
  end
end

ここでは、更新が成功したときにリダイレクトしますが、成功しなかった場合はeditアクションをレンダリングします。したがって、私たちはにアクセスでき@user、あなたのエラーはに存在します@user.errors

于 2012-05-04T18:16:58.383 に答える