【发布时间】:2015-04-03 01:14:45
【问题描述】:
在我的 Ruby on Rails 应用程序中,我正在创建一个影院网站。用户可以将他们最喜欢的演员保存在首选项表中,而我要做的是获取它,以便如果添加了包含该演员的新电影,那么所有以该演员为最爱的用户都会通过电子邮件发送电影的详细信息。
我的电子邮件系统已经在工作,用户会收到电子邮件以确认他们已成功注册。
我遇到的问题是我需要通过控制器检索添加到新电影记录中的演员,如果这符合用户的偏好,然后通过电子邮件发送给他们。但是我正在努力在保存之前如何检查电影的参数。
到目前为止,我已经在应用程序控制器中执行了以下操作,以查找他们最喜欢演员 Benedict Cumberbatch 的用户电子邮件:
def actor_user
actor = "Benedict Cumberbatch"
user = Perference.where(actor: actor).pluck(:user_id)
User.where(id: user).pluck(:email)
end
这个问题也是演员是硬编码的,而我想做的是从电影演员中提取电影的三个演员的名字并通过这些进行检查。
Films_controller:
def create
@film = Film.new(film_params)
if @film.save
redirect_to @film
else
render 'new'
end
end
User_Mailer.rb
class UserMailer < ApplicationMailer
default from: 'no-reply@thorcinemas.com'
def welcome_email(user)
@user = user
@url = 'http://localhost:3000/users/login'
# mail(to: @user.email, subject: 'Welcome to My Awesome Site')
mail(to: @user.email, subject: 'Welcome to My Awesome Site')
end
end
application_mailer:
class ApplicationMailer < ActionMailer::Base
#default sender: "ben@thorcinemas.com"
default from: "ben@thorcinemas.com"
layout 'mailer'
end
config/environments/development.rb:
config.action_mailer.delivery_method = :smtp
# SMTP settings for gmail
config.action_mailer.smtp_settings = {
:address => "smtp.gmail.com",
:port => 587,
:user_name => ENV['my_email
:password => ENV['my_password'],
:authentication => "plain",
:enable_starttls_auto => true
}
有人可以帮忙吗?我知道我需要一封新电子邮件(因为目前我只有welcome_email.html.erb),所以在适当的时候需要这些。
这是架构:
create_table "films", force: :cascade do |t|
t.string "title"
t.string "synopsis"
t.string "director"
t.string "cast1"
t.string "cast2"
t.string "cast3"
t.date "release_date"
t.string "warnings"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "image_url"
t.string "certificate_id"
t.integer "category_id"
t.integer "hours"
t.integer "minutes"
t.string "video_url"
end
create_table "perferences", force: :cascade do |t|
t.integer "user_id"
t.integer "category_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.text "colour"
t.text "actor"
end
create_table "users", force: :cascade do |t|
t.string "password_digest"
t.string "role"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "first_name"
t.string "last_name"
t.string "house_no"
t.string "street"
t.string "town"
t.string "postcode"
t.string "email"
t.date "date_of_birth"
end
我知道我在电影表中而不是演员表中包含 actor1、actor2、actor3 违反了最佳实践,但出于此问题的目的,请忽略这一点。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 email parameters