Как пропустить фильтры в Rails Forem Gem - PullRequest
2 голосов
/ 15 февраля 2012

Я хотел бы разрешить анонимный доступ к моим форумам.Я использую драгоценный камень Forem и драгоценный камень Devise.В ApplicationController у меня есть before_filter, который гарантирует, что пользователи вошли в систему.

before_filter :authenticate_user!

В моих собственных контроллерах я использую skip_filter, чтобы разрешить анонимный доступ к действиям, но я не знаю, как это сделать для контроллеров вForem Gem.

Я мог бы переместить оператор before_filter из моего ApplicationController в каждый из моих собственных контроллеров, но я бы не стал.

Ответы [ 2 ]

4 голосов
/ 04 октября 2012

Спасибо за ответ Райан, Просто хотел бы отметить, что файл должен быть:

forem/application_controller_decorator.rb в противном случае он не будет загружаться с этим кодом инициализатора (примечание: подчеркивание - не тире).

И чтобы повторить, код инициализатора должен быть:

Rails.application.config.to_prepare do 
  Dir.glob(Rails.root.join("app/**/*_decorator*.rb")) do |c|
    Rails.configuration.cache_classes ? require(c) : load(c)
  end
end

Чтобы он перезагружался при каждом запросе в режиме разработки.

Надеюсь, это сэкономит кому-то несколько часов!

0 голосов
/ 15 февраля 2012

Лучшим местом для этого будет файл в вашей директории app/controllers по адресу forem/application_controller-decorator.rb, содержащий этот контент:

Forem::ApplicationController.class_eval do
  skip_before_filter :authenticate_member!
end

Затем вам нужно будет включить этот файл с помощью таких строк в файл с именем config/initiailizers/load_decorators.rb:

Dir.glob(Rails.root.join("app/**/*_decorator*.rb")) do |c|
  Rails.configuration.cache_classes ? require(c) : load(c)
end

Это позволит вам указать и другие декораторы для любого другого класса Forem, если вы того пожелаете.

Я украл эту идею у Spree (над которой я сейчас работаю полный рабочий день), и я думаю, что она довольно солидная. Вы можете увидеть оригинальную реализацию этого здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...