通过电子邮件在ruby on rails 3上创建订阅

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. 创建表以存储电子邮件帐户
  2. 创建表单以收集电子邮件帐户
  3. 创建邮件程序以向订阅者分发电子邮件

第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)