19

只是对 Rails 的最佳实践感到好奇,我在其中放置了一个自定义约束类,该类用作 config/routes.rb 中的约束。似乎Rails.root/lib是所有用户类的去处。这适合这个吗?我应该在里面为约束创建一个目录吗?现在存在 2 个空目录,assets并且tasks. 有这方面的约定吗?

4

2 回答 2

21

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
于 2012-10-23T19:00:02.457 回答
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

于 2013-05-23T16:47:49.943 回答