Rails передает параметры/аргументы в функцию обратного вызова ActiveRecord

У меня есть фрагмент ниже в одной из моих моделей AR:

after_update :cache_bust

Метод cache_bust в модели принимает параметр (boolean), который по умолчанию устанавливает значение false.

Как передать true этому методу в модели из моего обратного вызова ActiveRecord, определенного выше?

Ex: after_update :cache_bust(true) не работает, потому что это символ, как я могу передать true методу param?

Ответ 1

Существует четыре типа обратных вызовов, принятых макросами обратного вызова: ссылки на методы (символ), объекты обратного вызова, встроенные методы (с использованием proc) и встроенные методы eval (с использованием строки).

Попробуйте это?

after_update -> { cache_bust(true) }

Ответ 2

Основываясь на вашем пояснении, вы можете добиться того, что ищете, используя необязательные параметры метода, например:

def cache_bust(callback = true)
    ... method body
end

В сценарии, когда метод вызывается из обратного вызова after_update, параметр не передается, но по умолчанию используется значение true. В противном случае, если метод вызывается из любого места "вручную", у вас есть возможность передать любое значение, которое вы хотите для этого метода.

Ответ 3

Очень легко передать параметры от контроллера к обратному вызову, вы можете вызвать имя params в модели. Пример:

В контроллере:

Quiz.create(name: 'abc')

В модели:

before_create :valid_name?

def valid_name?
  puts name
end

Ответ 4

Короткий ответ: Нет. Вы не можете передавать какие-либо аргументы. Вы можете использовать attr_accessor для создания виртуального атрибута и установки этого атрибута.