Где помещать классы ограничений в проект Rails
Просто интересуйтесь рекомендациями для Rails, где я помещаю класс пользовательских ограничений, который используется как ограничение в config/routes.rb. Кажется, что Rails.root/lib
- это все классы пользователей. Это подходит для этого? Должен ли я создавать каталог внутри ограничений? Теперь существуют 2 пустых каталога, assets
и tasks
. Существуют ли для этого соглашения?
Ответы
Ответ 1
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
Ответ 2
Странно, что гид ничего не говорит об этом пути, но 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.