【发布时间】:2015-06-14 22:11:32
【问题描述】:
好的,在我的 RoR 应用程序中,我有一个影院系统,用户可以在其中设置偏好,包括保存他们最喜欢的演员。我想做的是得到它,以便在添加新电影时,如果用户将电影的任何演员保存为他们的最爱,他们将收到一封电子邮件,通知他们该电影。目前我正在尝试做一个简化版本,如果电影有演员利亚姆尼森,那么只有一个用户会收到电子邮件,并且电子邮件将与用户登录网站时收到的电子邮件相同(我已经让这个功能正常工作)。
电影控制器:
def create
@film = Film.new(film_params)
if @film.save
user = Perference.where(actor: "Liam Neeson").pluck(:user_id).first
if not user.blank?
UserMailer.welcome_email(user).deliver
end
redirect_to @film
else
render 'new'
end
end
user_mailer:
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')
end
end
welcome_email.html.erb:
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
</head>
<body>
<h1>Welcome to Thor Cinemas, <%= @user.first_name %>!</h1>
<p>
You have successfully signed up to Thor Cinemas,
your username is: <%= @user.first_name %> <%= @user.last_name %>.<br>
</p>
<p>
To login to the site, just follow this link: <%= @url %>.
</p>
<p>Thanks for joining and have a great day!</p>
</body>
</html>
和架构:
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
但是得到以下错误:
NoMethodError in FilmsController#create
undefined method `email' for 69:Fixnum
我知道我的代码目前存在问题,例如,在电影表中包含 cast1、cast2 和 cast3 不是最佳做法,并且没有任何验证来确保仅向用户发送电子邮件如果他们最喜欢的演员与电影的演员相匹配,但我现在只是想发送一封电子邮件,稍后再处理。
有人可以帮忙吗。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 email ruby-on-rails-4