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

时间:2011-04-20 12:19:26

标签: ruby-on-rails-3

我想在使用http_referer的路由上的routes.rb中应用约束我该怎么办?

由于

2 个答案:

答案 0 :(得分:0)

就我所知,你可以采取两种方式之一。

更容易,但控制力较弱:

#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,以确定是否满足约束条件。

答案 1 :(得分:0)

为了改进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