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