Kad*_*ile 2 email ruby-on-rails subscriptions
我正在设计一个简单的rails 3应用程序,并有一个post模型
t.string :author
t.string :title
t.text :description
Run Code Online (Sandbox Code Playgroud)
要实现的是,能够向订阅者发送电子邮件,感兴趣的读者将获得一个添加其电子邮件地址的表单,以便在创建帖子时向订阅者发送电子邮件,向他们显示新帖子....谢谢,也是一种新的铁轨,请说明一点
Rya*_*cis 17
高级步骤
第1步:创建订户表
rails g resource Subscriber email:string
Run Code Online (Sandbox Code Playgroud)
第2步:创建表单
在与要收集电子邮件的视图对应的控制器操作中:
@subscriber = Subscriber.new
Run Code Online (Sandbox Code Playgroud)
在您的视图中,您要收集订阅者的电子邮件地址:
<% form_for(@subscriber) do |f| %>
<%= f.text_field :email %>
<%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
在你的路线:
resources :subscribers
Run Code Online (Sandbox Code Playgroud)
在app/controllers中添加文件subscriber_controller.rb并添加以下内容(请注意,您将需要添加其他逻辑来解决无法保存电子邮件的情况,例如,如果您选择对Subscribers模型进行验证,则检查电子邮件是否有效格式):
class SubscribersController < ApplicationController
def create
@subscriber = Subscriber.new(params[:subscriber])
@subscriber.save
redirect_to root_path
end
end
Run Code Online (Sandbox Code Playgroud)
第3步:梅勒
请参阅http://guides.rubyonrails.org/action_mailer_basics.html上的文档
它会像下面这样......
rails g mailer SubscriptionMailer
Run Code Online (Sandbox Code Playgroud)
在mailers/subscription_mailer.rb中添加如下内容:
def send_email(email,post)
@post = post
mail(to: email, subject: @post.title)
end
Run Code Online (Sandbox Code Playgroud)
找到文件夹app/views/subscription_mailer并添加文件send_email.html.erb.这是将发送给您的电子邮件订阅者的内容.
在您的development.rb文件中,设置邮件程序.在下面的例子中,我使用了一个名为Mandrill的工具:https://mandrillapp.com
config.action_mailer.default_url_options = { :host => "localhost:3000" }
config.action_mailer.smtp_settings = {
address: "smtp.mandrillapp.com",
port: 587,
domain: "localhost:3000",
authentication: "plain",
enable_starttls_auto: true,
user_name: ENV['email_username'],
password: ENV['email_password']
}
Run Code Online (Sandbox Code Playgroud)
如果您需要设置ENV变量的帮助,请查看Figaro gem:https://github.com/laserlemon/figaro
请注意,根据订阅者和帖子,您可以运行以下方法发送电子邮件:
SubscriptionMailer.send_email(@subscriber,@post).deliver
Run Code Online (Sandbox Code Playgroud)
我将从终端运行以下命令以确认您的邮件工作正常:
rails c
SubscriptionMailer.send_email("youremail@example.com",Post.last).deliver
Run Code Online (Sandbox Code Playgroud)
如果您收到电子邮件,那么您就知道邮件正在运行.最后一步是编写触发电子邮件的逻辑.在这种情况下,由于您希望在创建帖子后发送电子邮件,因此可以在Post模型中进行after_create回调.
在Post.rb中:
after_create :send_email_to_subscribers
private
def send_email_to_subscribers
Subscriber.all.each do |subscriber|
SubscriptionMailer.send_email(subscriber.email,self)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2803 次 |
| 最近记录: |