Я Googled это и не могу показаться, чтобы найтиВызов помощника приложения Rails в Sidekiq работника
class MyWorker
include Sidekiq::Worker
include ApplicationHelper
worker code.... etc....
myapphelper(arg)
end
У меня есть простой рабочий, который в конце называет помощник приложения, но я получаю:
NoMethodError: undefined method `myapphelper'
Я думал, что добавление include ApplicationHelper
сделало бы трюк.
UPDATE
Так давайте добавим еще некоторые детали. Помощник (который на самом деле был на самом деле методом в моем контроллере приложения), вопрос был первоначально это:
def add_history(resource, action, note)
resource.history.create(action: action, note: note, user_id: current_user.id) if resource.present? && action.present? && note.present?
end
Идея здесь у меня есть быстрый способ добавить бумажный след к модели. Я понял, что, возможно, я не должен передавать реальный объект в метод, потому что (как указано в документах Sidekiq), если этот объект изменится, вы можете попасть в беду. Так что я изменил его на это:
def add_history(klass, id , action, note)
resource = klass.constantize.find_by(id: id)
resource.history.create(action: action, note: note, user_id: current_user.id) if resource.present? && action.present? && note.present?
end
Теперь, когда я включаю это как модуль current_user.id терпит неудачу, потому что это установлено в ApplicationController.
Так что давайте пересмотреть мой вопрос: было бы лучше всего добавить current_user.id в качестве аргумента в мой модульный метод или каким-то образом сохранить его в Application Controller и т. Д.?
Если я полностью отслежен здесь, и этот тип логики должен идти куда-то еще, пожалуйста, дайте мне знать.
ApplicationHelpers не предназначены для использования внутри ничего, кроме видов. Подумайте о переносе своего метода на простой старый модуль и включите его. –
Хммм ... ты прав ... Я думаю, что я полностью подошел к этому помощнику. Если вы добавите это как ответ, я соглашусь с ним, потому что это правильно, как издалека, как я могу сказать, даже если вы указали на очевидное для меня :) –
включение не работает, потому что этот модуль выходит за рамки рабочего видения. Вам также понадобится этот файл, например 'require '/ filepath'' –