2

actionをOptionsController含む がありますaccount。対応するビューには 3 つのフォームがあり、3 つの異なるアクション、update_profileupdate_userおよびに投稿されchange_passwordます。action各アクションが実行され、ビューが再度設定されてレンダリングされる にリダイレクトされます。

after_filter私はDRYになり、リダイレクトを行うために作成しようとしていました:

after_filter( :only => [:change_password, :update_profile, :update_user] ) do |controller|
  controller.send(:redirect_to, :action => :account)
end

ただし、これは呼び出されないようです。むしろ、アクションはビューが見つからないことを訴えます。

Template is missing
Missing template options/update_user.erb in view path app/views

これを DRY の方法で行う方法はありますか、または 3 つのアクションのそれぞれで redirect_to 呼び出しをそのままにしておく必要がありますか?

4

2 に答える 2

8

redirect_to各アクションに呼び出しを入れるだけです。DRY と不可解な魔法の間には微妙な境界線があります。アクションの予想される動作を明白に打ち砕く何かのようなことをしようとするafter_filterのは、おそらく魔法が多すぎるように感じます。

于 2009-06-24T15:22:06.070 に答える
2

応答がクライアントに送信された後にフィルターが実行された後、つまりレンダリングまたはリダイレクトが発生した後、そのエラーが表示されるのは私の理解です。それらは、ログデータ、ベンチマーク、接続のクローズ、その他の種類のクリーンアップなどを実行できるようにすることを目的としています

于 2009-06-24T16:01:01.557 に答える