2011-12-04 41 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(只有你试图做到这一点,而不设置会话参数??)。

你不需要'链'过滤器。只需创建一个新函数(例如: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 

如果你想基于移动单个站点内的分支行为,你应该做的是,在控制器,在路线,或两者兼而有之。我希望我回答你的问题。