好的,在我的RoR应用程序中,我有一个用户有偏好的影院系统,其中包括保存他们最喜欢的演员。我想要做的就是这样做,以便在添加新电影时,如果用户将任何电影的演员保存为他们的最爱,他们将收到一封电子邮件,通知他们电影。
我可以得到它,通过使用where语句,当添加电影时,数组中的FIRST用户通过电子邮件发送,films_controller:
def create
@film = Film.new(film_params)
if @film.save
if not @film.cast1.blank?
user1 = Perference.where(actor: @film.cast1).first.user
if not user1.blank?
actor = @film.cast1
FavouriteActor.favourite_actor(user1, actor).deliver
end
end
if not @film.cast2.blank?
user2 = Perference.where(actor: @film.cast2).first.user
if not user2.blank?
actor = @film.cast2
FavouriteActor.favourite_actor(user2, actor).deliver
end
end
if not @film.cast3.blank?
user3 = Perference.where(actor: @film.cast3).first.user
if not user3.blank?
actor = @film.cast3
FavouriteActor.favourite_actor(user3, actor).deliver
end
end
redirect_to @film
else
render 'new'
end
end
然后转到favourite_actor.rb
邮件程序:
class FavouriteActor < ApplicationMailer
def favourite_actor(user, actor)
@user = user
@actor = actor
@url = 'http://localhost:3000/films'
mail(to: @user.email, subject: 'Your favourite actor stars in a new film')
end
end
然后发送favourite_actor.html.erb
电子邮件
但是,我该怎么做才能取代这样的行:user1 = Perference.where(actor: @film.cast1).first.user
,以便将所有与该演员最喜欢的用户通过电子邮件发送给我们?
答案 0 :(得分:2)
您需要稍微更新一下您的查询:
preferences = Preference.where(["actor = ? OR actor = ? OR actor = ?", @film.cast1, @film.cast2, @film.cast3]).includes(:user)
preferences.each do |preference|
FavoriteActor.favourite_actor(preference.user, actor).deliver
end
答案 1 :(得分:0)
也许尝试类似:
users = Preference.where(actor: @film.cast1)
users.each do |user|
FavoriteActor.favourite_actor(user, actor).deliver
end
如果我理解你想要正确做什么,这将找到所有喜欢该演员的用户,遍历整个集并通过电子邮件发送每个用户。