Ruby on rails 让Actionmailer发送电子邮件
我问了一个类似的问题,并得到了很大的帮助,它澄清了一些理解和概念。这是第一次使用actionmailer,所以我正在努力获得更好的理解 我试图实现的是将电子邮件发送给单击“提醒我”按钮的用户。这是一个简单的图书馆应用程序,用户可以签出、签入并在图书签入时请求提醒。我只是在最后一部分逻辑上挣扎,一旦我看到它工作,我相信我会更好地理解它 因此,当一本书的签出状态更改时,该书模型会有各种帖子Ruby on rails 让Actionmailer发送电子邮件,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,我问了一个类似的问题,并得到了很大的帮助,它澄清了一些理解和概念。这是第一次使用actionmailer,所以我正在努力获得更好的理解 我试图实现的是将电子邮件发送给单击“提醒我”按钮的用户。这是一个简单的图书馆应用程序,用户可以签出、签入并在图书签入时请求提醒。我只是在最后一部分逻辑上挣扎,一旦我看到它工作,我相信我会更好地理解它 因此,当一本书的签出状态更改时,该书模型会有各种帖子 Check out <%= form_for @book do |f| %> <%= f.
Check out
<%= form_for @book do |f| %>
<%= f.label :checked_out, "Check Book Out?" %>
<%= f.check_box :checked_out, {}, true %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :checked_out, :value => true %>
<%= f.submit 'Checkout' %>
<% end %>
Check In
<%= form_for @book do |f| %>
<%= f.label :checked_out, "Check Book Back In" %>
<%= f.check_box :checked_out, {checked: false}, false %>
<%= f.hidden_field :user_id, :value => nil %>
<%= f.hidden_field :checked_out, :value => false %>
<%= f.submit 'Check In' %>
<% end %>
Register Interest
<%= form_for @book do |f| %>
<%= f.label :remind_me, "let Me know when book back in" %>
<%= f.check_box :remind_me, {checked: false}, false %>
<%= f.hidden_field :remind_me, :value => current_user.id %>
<%= f.submit 'Remind Me' %>
<% end %>
还有我的行动邮件
class ReminderMailer < ActionMailer::Base
default from: "my email address"
def remind_email(user)
@user = user
mail(:to => user.email, :subject => "Library Clerk")
end
end
类提醒器任何建议您都可以创建一个
提醒
模型(以及数据库中的表格),用于跟踪用户设置的提醒
class Reminder < ActiveRecord::Base
belongs_to :user
belongs_to :book
end
class Book < ActiveRecord::Base
has_many :reminders
end
您将拥有一个提醒控制器(仅向routes.rb添加资源:提醒:[:创建]
)
注意:确保您添加了一个验证,即没有用户会向同一本书请求提醒。我正在考虑使用一个单独的模型,这就是我要做的。只是为了我自己的确认,位于“提醒我”列中的id永远不会访问用户id,是吗?您不再需要
Book
模型中的提醒我
列,如前所述,您将在db中为每个提醒创建一个提醒
条目。您只需发送图书id,然后在控制器操作中使用当前用户
。您是否介意解释提醒。创建(用户:当前用户,图书:@book),我会有一个提醒控制器?它会出现在创建操作中吗?抱歉不确定您的意思似乎有错误无法找到id为的书籍单击“提醒我”时,它在参数中传递了一个空白值?抱歉再次询问,请确保表单以正确的图书id作为隐藏字段呈现,然后检查服务器日志,查看包含图书id的参数的名称。
class Reminder < ActiveRecord::Base
belongs_to :user
belongs_to :book
end
class Book < ActiveRecord::Base
has_many :reminders
end
<%= form_for @reminder do |f| %>
<%= f.label :remind_me, "let Me know when book back in" %>
<%= f.hidden_field :book_id, :value => @book.id %>
<%= f.submit 'Remind Me' %>
<% end %>
class RemindersController < ApplicationController
def create
@book = Book.find(params[:reminder][:book_id])
Reminder.create(user: current_user, book_id: @book.id)
redirect_to @book
end
end
def reminder_mailer
if !self.checked_out && self.changes[:user_id] && self.user.nil?
# get all users waiting for a remind on this book
@users = self.reminders.map(&:user)
@users.each do |user|
ReminderMailer.remind_email(user).deliver
end
# remove reminders as users have been reminded
self.reminders.destroy_all
end
end