检查移动设备后Rails 3 before_filter

时间:2011-12-04 21:01:05

标签: ruby-on-rails-3

嗨,我不知道如何在这里做链式过滤器。这是我的代码

  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之后,如果它不是移动设备,它将重定向到普通网站,我想检查用户是否已登录。在移动版本上,不需要用户登录in。

在普通网站上,我也想:except一个特定的控制器。

我该怎么做?

非常感谢。

1 个答案:

答案 0 :(得分: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

如果要基于移动设备在单个站点内分支行为,则应在控制器,路由或两者中执行此操作。我希望我回答你的问题。