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 для создания виртуального атрибута и установки этого атрибута.