Ruby on Rails, kirim beberapa email secara bersamaan

Oke, dalam aplikasi RoR saya, saya memiliki sistem bioskop di mana pengguna memiliki preferensi, termasuk menyimpan aktor favorit mereka. Apa yang saya coba lakukan adalah membuatnya sehingga ketika sebuah film baru ditambahkan, jika pengguna menyimpan salah satu aktor film sebagai favorit mereka, mereka akan mendapatkan email yang memberitahukan mereka tentang film tersebut.

Saat ini saya bisa mendapatkannya sehingga, melalui penggunaan pernyataan di mana, ketika sebuah film ditambahkan, pengguna PERTAMA dalam array akan dikirimi email, film_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

Ini kemudian masuk ke favourite_actor.rb mailer:

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

Yang kemudian mengirimkan email favourite_actor.html.erb

Tapi apa yang bisa saya lakukan untuk mengganti baris seperti ini: user1 = Perference.where(actor: @film.cast1).first.usersehingga semua pengguna dengan aktor tersebut sebagai favorit mereka dikirimi email?


person Community    schedule 09.04.2015    source sumber


Jawaban (2)


Anda perlu sedikit memperbarui pertanyaan Anda:

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
person RAJ    schedule 09.04.2015
comment
Dan ini akan masuk ke film_controller? - person ; 09.04.2015
comment
Saya mendapatkan kesalahan ini: undefined method include' for #‹Perference::ActiveRecord_Relation:0x6c84a98›` dan Anda juga mendapatkan '[' acak di baris pertama Anda - person ; 09.04.2015
comment
Oh! salah ketik. Memperbaikinya. Seharusnya includes - person RAJ; 09.04.2015
comment
Saya sekarang mendapatkan kesalahan ini: Association named 'users' was not found on Perference; perhaps you misspelled it? - person ; 09.04.2015
comment
Saya mendapatkan kesalahan di atas tetapi memiliki hubungan yang benar di antara keduanya - person ; 09.04.2015
comment
Anda perlu menulis user alih-alih users - person RAJ; 09.04.2015

Mungkin mencoba sesuatu seperti:

users = Preference.where(actor: @film.cast1)
users.each do |user|
  FavoriteActor.favourite_actor(user, actor).deliver
end

Jika saya memahami apa yang ingin Anda lakukan dengan benar, ini akan menemukan semua pengguna dengan aktor favorit itu, mengulangi set dan mengirim email ke masing-masing.

person Adam Bronfin    schedule 09.04.2015
comment
Ini akan menimbulkan kesalahan, karena Anda meneruskan objek preferensi sebagai argumen pertama dari metode favourite_actor, yang mengharapkan objek pengguna - person RAJ; 09.04.2015