рельсы: проверка, какой метод контроллера был вызван из модели - PullRequest
1 голос
/ 28 мая 2010

Есть ли способ проверить, какой метод контроллера был вызван из модели?

Пример: Скажем, был вызван метод создания контроллера:

def create
     do something
end

Тогда в модели что-то делать только тогда, когда в контроллере было вызвано

if create?
      do something
end

Ответы [ 4 ]

2 голосов
/ 28 мая 2010

Просто передайте флаг create методу модели или создайте два разных метода в модели и вызовите соответствующий из контроллера. В противном случае вы создаете довольно неприятную зависимость между контроллером и моделью. Как вы заметили, методы проверки принимают параметр, который указывает, когда они запускаются.

2 голосов
/ 28 мая 2010

Я мог бы представить, что вы можете проверить стек вызовов, но это именно то, для чего предназначены , а не : теперь они не должны ничего касаться контроллера.

Изучение стека:

if caller.grep /create/
  # do something
elsif caller.grep /update/
  #do something else
end

Должен сделать свое дело.

1 голос
/ 28 мая 2010

Внутри вашей модели вы можете спросить / узнать, является ли обрабатываемая вами запись новой, или нет

p = Post.new
p.new_record? => true
p = Post.first
p.new_record? => false

Может, тебе это достаточно поможет?

В противном случае внутри модели вы можете добавить обратных вызовов , например, before_create, который вызывается только перед сохранением новой записи. Чтобы ваша модель была стройной, и у вас должно быть много обратных вызовов, их можно сгруппировать в наблюдателе .

Надеюсь, это поможет.

0 голосов
/ 29 мая 2019

Проверка

if params[:action] == 'create'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...