Ruby on rails 3 如何在rails 3中应用http_referer约束?

Ruby on rails 3 如何在rails 3中应用http_referer约束?,ruby-on-rails-3,Ruby On Rails 3,我想在routes.rb中对使用http\u referer的路由应用约束我该怎么做 谢谢据我所知,你可以用两种方法中的一种来做 更简单,但控制更少: #config/routes.rb resources :waffles, :constraints => {:referer => 'http://wafflesarerad.com'} 更多控制: #config/routes.rb require 'referer_constraint' constraints (Refere

我想在routes.rb中对使用http\u 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的答案,我建议

  • 将constraint类放置在app/constraints/而不是lib/中,Rails将自动拾取它,您无需在routes文件的顶部粘贴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

谢谢,这解决了我的问题。如何知道约束哈希的可能值?