Подтвердить что ты не робот

Где помещать классы ограничений в проект Rails

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

4b9b3361

Ответ 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.