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