Чтобы объявить методы модуля, вам нужно определить метод с помощью self
.
module EmailAndPushHelper
def self.unaccepted_lex_request(meeting_id)
# ...
end
end
Методы экземпляра модуля доступны только в том случае, если вы включаете или расширяете что-то еще с помощью модуля. Не как метод самого модуля.
Но это действительно неправильное место / название для этого кода. controller/concerns
- это действительно то место, куда вы кладете миксины, которые смешиваются в вашем контроллере Кроме того, это не действительно помощник, который также является чрезвычайно расплывчатым термином, который также обычно означает миксин, который используется в представлении, а иногда и в контроллере в Rails.
Этот код фактически принадлежит заданию или объекту службы.
class EmailAndPushJob < ApplicationJob
queue_as :default
def perform(meeting)
# You will have to solve the NoMethodError here
if check_settings(meeting.requestee_id, 'lex_email')
MeetingMailer.unaccepted_mtg_request(meeting).deliver_later
end
if check_settings(meeting.requestee_id, 'lex_push')
title = "A Lex request needs your response."
message = "#{meeting.requestor.preferred_name} is waiting for your response.'"
PushNotificationWorker.perform_async(meeting.requestee.id, title, message, {
# Use strings or symbols!
"status" => "ok",
"body" => message,
"title" => title,
"meetingId" => meeting.id
})
end
end
end
Вы также хотите использовать партии в своей задаче рейка вместо просто .each
, поскольку это загрузит каждую запись в память и создаст sh ваш сервер, как только вы получите достойную количество данных.
task :email_unaccepted_meetings => :environment do
desc "If meeting time is less than 3 days away, and not accepted, send email to requestee"
meetings = Meeting.where(
status: "Active",
accepted: true,
meeting_time: Time.now..3.days.from_now
).find_each do |meeting|
EmailAndPushJob.perform_now(meeting)
end
end