2011-12-04 9 views
0

こんにちは私はここでどのように連鎖フィルタを行うか分からない。ここで私が欲しいものを自分のコードRails 3 before_filterモバイルデバイスを確認した後

before_filter :prepare_for_mobile 
    protect_from_forgery 

    private 

    def mobile_device? 
    request.user_agent =~ /Mobile|webOS/ 
    end 
    helper_method :mobile_device? 

    def prepare_for_mobile 
    request.format = :mobile if mobile_device? 
    end 

それは、モバイルデバイスでなければ、それは通常のウェブサイトにリダイレクトされますと、私はユーザーがログインしているかどうかを確認したい:prepare_for_mobile後ではありません。モバイル版では、どのユーザーになりますログインする必要があります。

普通のウェブサイトでは、私は:exceptも特定のコントローラにしたいと思います。

どうすればよいですか?

ありがとうございます。

答えて

1

さて、いくつかのこと.... Railscasts.com hereからソリューションを部分的に実装しているようです(セッションパラメータを設定しないと、あなたはそれをやってみませんか?)。

フィルタを「連鎖する」必要はありません。他の2つの関数を必要な順に呼び出して、それをフィルタにする新しい関数(例:get_ready)を作成するだけです。

before_filter :get_ready 
protect_from_forgery 

private 

def get_ready 
    prepare_for_mobile 
    the_other_thing_you_want_to_chain 
end 

def mobile_device? 
    request.user_agent =~ /Mobile|webOS/ 
end 
helper_method :mobile_device? 

def prepare_for_mobile 
    request.format = :mobile if mobile_device? 
end 

def the_other_thing_you_want_to_chain 
    do_something unless mobile_device? 
end 

モバイルに基づいて1つのサイト内で動作を分岐する場合は、コントローラ、ルート、またはその両方で実行する必要があります。あなたの質問にお答えしたいと思います。

関連する問題