Я хотел бы отправить электронное письмо при регистрации проекта (с категорией и правомочной аудиторией) каждому пользователю, создавшему предупреждение (с той же категорией и одной подходящей аудиторией).
MODEL
class Project
belongs_to :category
belongs_to :fondation
has_many :project_eligibles
has_many :eligibles, through: :project_eligibles
end
class Category
has_many :projects
has_many :alerts
end
class ProjectEligible
belongs_to :project
belongs_to :eligible
end
class Publication
belongs_to :user
belongs_to :category
belongs_to :eligible
end
class User
has_many :favorites
has_many :favorite_projects, through: :favorites, source: :favorited,
source_type: 'Project'
has_many :publications
end
MAILER
class ProjectMailer < ApplicationMailer
def newproject(project)
@project = project
proj_elig = ProjectEligible.where('project_id =?', project.id).pluck(:eligible_id)
mails = User.includes(:publications).where("publications.eligible_id IN (?) AND publications.category_id = ?", proj_elig, project.category_id).pluck(:email)
mail(
to: mails,
subject: "A new project for you !"
)
end
end
КОНТРОЛЛЕР (проект)
class ProjectsController < ApplicationController
def create
@project = Project.new(project_params)
@project.save
if @project.save
ProjectMailer.newproject(@project).deliver_now
redirect_to projects_path
else
render :new
end
end
private
def project_params
params.require(:project).permit(:title, :description, :link, :expiration,
:all_tags, :category_id, :fondation_id, eligible_ids: [])
end
end
ProjectMailer работает с категорией, но не с project_elptable.
Например, если пользователь хочет получить электронное письмо, как только проект будет создан с category_id 1 и elptable_id 1:
#<Publication:0x007fe089425010
id: 17,
user_id: 1,
category_id: 1,
eligible_id: 1,
created_at: Sun, 04 Nov 2018 17:08:52 UTC +00:00,
updated_at: Sun, 04 Nov 2018 17:08:52 UTC +00:00>
Я создаю проект:
Project.create!(
title: "test title",
description: 'sample description',
expiration: "2018-11-14",
category_id: 1 ,
fondation_id: 1,
eligible_ids: [1,2]
)
Если я проверю:
проект создан:
#<Project id: 481, title: "test title", description: "sample description", link: nil, expiration: "2018-11-14", category_id: 1, fondation_id: 1, created_at: "2018-11-13 09:15:01", updated_at: "2018-11-13 09:15:01">
Но права проекта странные, они не сохраняются:
#<ActiveRecord::Associations::CollectionProxy [#<ProjectEligible id: nil, project_id: nil, eligible_id: 1, created_at: nil, updated_at: nil>, #<ProjectEligible id: nil, project_id: nil, eligible_id: 2, created_at: nil, updated_at: nil>]>
и proj_elig пуст: []
Но после этого, если в терминале, я проверяю Project.last.project_eligibles
:
Я нахожу свой проект (id: 398) с моим 2 elptable_id (1 и 2):
[#<ProjectEligible:0x007fe08d010d40
id: 398,
project_id: 481,
eligible_id: 2,
created_at: Tue, 13 Nov 2018 09:15:01 UTC +00:00,
updated_at: Tue, 13 Nov 2018 09:15:01 UTC +00:00>,
#<ProjectEligible:0x007fe08d010048
id: 397,
project_id: 481,
eligible_id: 1,
created_at: Tue, 13 Nov 2018 09:15:01 UTC +00:00,
updated_at: Tue, 13 Nov 2018 09:15:01 UTC +00:00>]
Возможно ли, что запись project_elitable задерживается по отношению к проекту, поэтому она всегда будет считаться пустой в ActionMailer?
Как мне убедиться, что project_elptables зарегистрировано, а proj_elig не пусто?
Спасибо за ваш совет! Я немного растерялся ....