在Rails项目中放置约束类的位置

时间:2012-10-23 18:53:39

标签: ruby-on-rails ruby-on-rails-3 naming-conventions ruby-on-rails-3.2 convention-over-configur

对Rails的最佳实践感到好奇,我在其中放置了一个自定义约束类,用作config / routes.rb中的约束。似乎Rails.root/lib是所有用户类所在的位置。这适合这个吗?我应该在内部创建约束目录吗?现在有2个空目录,assetstasks。有没有这方面的惯例?

2 个答案:

答案 0 :(得分:18)

lib/将是合适的地方。如果你想让它变得更干净,可以把它放在lib/constraint/authenticated.rb中并定义你的约束

module Constraint
  class Authenticated
    def matches?(request)
      # stuff
    end
  end
end

并在routes.rb

constraints Constraint::Authenticated.new do
  match 'account' => 'account#index'
end

答案 1 :(得分:11)

奇怪的是,指南没有说明该路径,但 lib / constraints 甚至列在API(ActionDispatch::Routing::Mapper::Scoping)中:

  

如果路由过于复杂,您可以将此逻辑移出到类中。该类必须在其上定义matches?方法,如果应该授予用户访问该路由的权限,则返回true;如果用户不应该访问,则返回false。

class Iphone
  def self.matches?(request)
    request.env["HTTP_USER_AGENT"] =~ /iPhone/
  end
end
     

此代码的预期位置为 lib / constraints