我想在路由中应用约束。在路由上使用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