我如何在rails 3应用http_referer约束



我想在路由中应用约束。在路由上使用http_referer我怎么能做到这一点?

谢谢

据我所知有两种方法。

更容易,但控制更少:

#config/routes.rb
resources :waffles, :constraints => {:referer => 'http://wafflesarerad.com'}

更多的控制:

#config/routes.rb
require 'referer_constraint'
constraints (RefererConstraint) do
  resources :waffles
end
#lib/referer_constraint.rb
class RefererConstraint
  def self.matches?(request)
    request.referer = 'http://wafflesarerad.com' ? true :false
  end
end

你可以用routes.rb中的:constraints =>哈希值约束请求的任何部分。您还可以对实现matches?(request)类级方法的自定义约束类进行修改。对于是否满足约束,该方法应该返回true/false。

为了改进Patrick的回答,我建议

  • 将约束类放在app/constraints/中,而不是lib/中,Rails会自动挑选它,你就不需要在你的路由文件的顶部粘贴一个require语句了
  • 不使用不必要的三元(?:)操作符

我会这样做:

#config/routes.rb
constraints (RefererConstraint) do
  resources :waffles
end
#app/constraints/referer_constraint.rb
class RefererConstraint
  def self.matches?(request)
    request.referer == 'http://wafflesarerad.com'
  end
end

相关内容

  • 没有找到相关文章