【问题标题】:creating a subscription by email in ruby on rails 3在 ruby​​ on rails 3 中通过电子邮件创建订阅
【发布时间】:2013-09-30 11:01:58
【问题描述】:

正在设计一个简单的 rails 3 应用程序,并且有一个后期模型

t.string :author
  t.string :title
  t.text :description  

要实现的是,能够向订阅者发送电子邮件,即.. 将为感兴趣的读者提供一个添加其电子邮件地址的表单,以便在创建帖子时,它会向订阅者发送一封电子邮件,显示他们新帖子....谢谢,也是 Rails 的新手,请描述性强

【问题讨论】:

    标签: ruby-on-rails email subscriptions


    【解决方案1】:

    高级步骤

    1. 创建表来存储电子邮件帐户
    2. 创建表单以收集电子邮件帐户
    3. 创建邮件程序以将电子邮件分发给订阅者

    第 1 步:创建订阅者表

    rails g resource Subscriber email:string
    

    第 2 步:创建表单

    在与您要收集电子邮件的视图对应的控制器操作中:

    @subscriber = Subscriber.new
    

    在您的视图中,您希望收集订阅者的电子邮件地址:

    <% form_for(@subscriber) do |f| %>
      <%= f.text_field :email %>
      <%= f.submit %>
    <% end %>
    

    在您的路线中:

    resources :subscribers
    

    在 app/controllers 添加文件 subscribers_controller.rb 并添加以下内容(请注意,您需要添加额外的逻辑来解决无法保存电子邮件的情况,例如,如果您选择在订阅者模型检查电子邮件是否为有效格式):

    class SubscribersController < ApplicationController
    
      def create
        @subscriber = Subscriber.new(params[:subscriber])
        @subscriber.save
        redirect_to root_path
      end
    
    end
    

    第 3 步:邮件程序

    请参阅http://guides.rubyonrails.org/action_mailer_basics.html的文档

    它会像下面这样......

    rails g mailer SubscriptionMailer
    

    在 mailers/subscription_mailer.rb 添加如下内容:

    def send_email(email,post)    
      @post = post
      mail(to: email, subject: @post.title)
    end
    

    找到文件夹 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']
      }
    

    如果您在设置 ENV 变量方面需要帮助,请查看 Figaro gem:https://github.com/laserlemon/figaro

    请注意,在给定订阅者和帖子的情况下,您可以运行以下方法来发送电子邮件:

    SubscriptionMailer.send_email(@subscriber,@post).deliver
    

    我会从终端运行以下命令来确认您的邮件程序是否正常工作:

    rails c
    SubscriptionMailer.send_email("youremail@example.com",Post.last).deliver
    

    如果您收到一封电子邮件,那么您就知道邮件程序正在工作。最后一步是编写触发电子邮件的逻辑。在这种情况下,由于您希望在创建帖子后发送电子邮件,您可以在 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
    

    【讨论】:

    • 它正在工作......但是我如何在创建新帖子后将电子邮件发送给我的订阅者。
    • 你需要一个 after_create 回调。我编辑了帖子的结尾,说明了如何做到这一点。告诉我进展如何!
    猜你喜欢
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-28
    • 2023-03-28
    • 2013-06-08
    相关资源
    最近更新 更多