私はAuthenticatedController
からすべて継承したコントローラをいくつか持っています(1つはPostsController
です)。これらの子コントローラのそれぞれに多くの方法が同様のCRUD操作を実行して、バック要求リファラに継承されたメソッドでフラッシュハッシュを割り当てることはできますか?
をリダイレクト私は私のコントローラを枯渇したかったので、私はそのコードをリファクタリングしてdo_action
と呼ばれるAuthenticatedController
に単一の方法でそれをすべて置きますオブジェクト、アクション、およびフラッシュメッセージを受け入れます。
class AuthenticatedController < ApplicationController
private
def do_action(action, obj, message, anchor='')
if obj.try(:action)
flash[:notice] = message
else
flash[:error] = 'Error Occurred'
end
redirect_to request.referer + anchor
end
end
class PostController < AuthenticatedController
def create
@post = Post.new
do_action(:save, @post, 'Created Successfully', "#post-#{@post.id}")
end
end
フラッシュメッセージが私のビューにもう表示されない点を除いて、素晴らしいです。
私が理解からclass PostController < AuthenticatedController
def create
@post = Post.new
do_action(:save, @post, 'Created Successfully', "#post-#{@post.id}")
end
private
def do_action(action, obj, message, anchor='')
if obj.try(:action)
flash[:notice] = message
else
flash[:error] = 'Error Occurred'
end
redirect_to request.referer + anchor
end
end
this SO questionを読んだ後、フラッシュがリクエストオブジェクトに委譲メソッドです:私はPostsController
に戻すdo_action
を移動した場合
は、フラッシュメッセージが予想として表示されます。 のリクエストオブジェクトにアクセスできます。request.referer
と思いますか?
AuthenticatedController
のメソッドからフラッシュにメッセージを割り当てることができないのはなぜですか?
あなたはこのようにしてはいけません。 私は問題がrequest.refererを使用していると思う、おそらくrequest.base_urlが良いでしょう。 – trueinViso