2012-05-04 11 views
0

コントローラにuserオブジェクトをusers_controllerで更新するフォームをaccount_settingsコントローラに作成しました。エラーメッセージは通過しません。コードを見てみましょう。別のコントローラからオブジェクトを更新するときにフォームエラーを表示

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... 

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 

フォーム

def account 
    @user = current_user 
end 

account_settings_controllerは更新されませんが、バック渡さ取得エラーメッセージはありません。何かご意見は?

答えて

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にあります。

+0

この問題は部分的なものではありません。私はおそらく、最初の場所でそれを混乱させるので、ここにコードを置いてはいけません。私は私の質問を更新しましたので、それはより重要です。 –

+0

答えが更新されました。 – zsquare

+0

Aaaaah!それは本当に私の問題を解決しました。ありがとうございました! –

関連する問題