Как передать значения ActiveRecord :: Relation в задание почтовой программы? - PullRequest
0 голосов
/ 21 июня 2020

Как передать значения ActiveRecord :: Relation в задание почтовой программы?

Если я попытаюсь отправить cards_to_send и получу ошибку:

ActiveJob::SerializationError: Unsupported argument type: ActiveRecord::Relation

My email_tasks:

  cards = Card.where(start_date: Date.today)
  users = User.where(receive_emails: true)
  users.find_each do |user|
    cards_to_send = cards.where(user_id: user)
    TaskMailer.with(user: users, cards: cards_to_send).daily_letters.deliver_later if cards_to_send.any?
  end

My task_mailer.rb:

class TaskMailer < ApplicationMailer
  before_action { @cards, @user = params[:cards], params[:user] }
  
  def daily_letters
    mail(to: @user.email, subject: "Work plan for today.")
  end
end

Я могу преобразовать cards_to_send в массив cards_to_send.to_a, но тогда я не могу использовать этот массив внутри почтовой программы, я получаю сообщение об ошибке:

NoMethodError: undefined method `email' for #<Array:0x00007f51d83b28c0>

Как правильно отправить тип ActiveRecord :: Relation в почтовую программу?

1 Ответ

0 голосов
/ 21 июня 2020

Просто замените

TaskMailer.with(user: users, cards: cards_to_send).daily_letters.deliver_later if cards_to_send.any?

на

TaskMailer.with(user: user, cards: cards_to_send.to_a).daily_letters.deliver_later if cards_to_send.any?

Благодаря mu слишком короткое

...