Rails 3: динамически установить after_filter в before_filter? - PullRequest
0 голосов
/ 16 августа 2011

Я бы хотел определить after_filter для восстановления изменений моего before_filter, чтобы сделанные изменения влияли только на это одно действие в моем контроллере. Вот что у меня есть:

before_filter :exclude_root_in_json
after_filter :restore_root_in_json

def exclude_root_in_json
  ActiveRecord::Base.include_root_in_json = false
end

def resotre_root_in_json
  ActiveRecord::Base.include_root_in_json = true
end

Есть ли способ сделать что-то вроде следующего?

def exclude_root_in_json
  default = ActiveRecord::Base.include_root_in_json
  ActiveRecord::Base.include_root_in_json = false
  self.class.after_filter do
    ActiveRecord::Base.include_root_in_json = default
  end
end

Мой конечный результат - завершить вызовом before_filter, который автоматически отменяет изменения для этого конкретного действия после его завершения. Как бы я это сделал?

1 Ответ

1 голос
/ 16 августа 2011

Похоже, вы могли бы использовать around_filter.Проверьте эту страницу API документов:

http://rails.rubyonrails.org/classes/ActionController/Filters/ClassMethods.html

Попробуйте это так:

around_filter :exclude_root_in_json

private
  def exclude_root_in_json
    default = ActiveRecord::Base.include_root_in_json
    ActiveRecord::Base.include_root_in_json = false
    yield
    ActiveRecord::Base.include_root_in_json = default
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...