Отключение модели after_find только при вызове с определенных контроллеров - PullRequest
1 голос
/ 24 марта 2010

У меня есть обратный вызов after_find в модели, но мне нужно отключить его в конкретном действии контроллера, например,

def index
  @people = People.find(:all) # do something here to disable after_find()?
end

def show
  @people = People.find(:all) # after_find() should still be called here!
end

Каков наилучший способ сделать это?

  1. Могу ли я передать что-то в .find, чтобы отключить все / определенные обратные вызовы?
  2. Могу ли я как-то получить имя контроллера в модели и не выполнять обратный вызов на основе имени контроллера (мне это не нравится) ..?

Помощь!

Ответы [ 2 ]

2 голосов
/ 18 марта 2014

@@ callback_after_find

не забудьте восстановить его. может быть, лучше.

class People
  def self.skip_after_find
    @@callback_after_find = false
    yield
  ensure
    @@callback_after_find = true
  end 
  def after_find
    return unless @@callback_after_find
    ...
  end
  private
  @@callback_after_find = true
end

People.skip_after_find do
  @people = People.find(:all) # do something here to disable after_find()?
end
0 голосов
/ 24 марта 2010

Вы можете добавить флаг в вашей модели, чтобы определить, хотите ли вы выполнить after_find или нет.

class People
  @@callback_after_find = true
  def after_find
    return unless @@callback_after_find
    ...
  end
end

В вашем контроллере теперь вы можете активировать или нет этот обратный вызов

def index
  People.callback_after_find = false
  @people = People.find(:all) # do something here to disable after_find()?
end

def show
  @people = People.find(:all) # after_find() should still be called here!
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...