如何将Rails邮件程序与动态值一起使用?

时间:2014-10-01 20:12:30

标签: ruby-on-rails ruby action mailer

我是Rails的新手,并且在如何在我的邮件程序中实现动态值方面苦苦挣扎。

下面的代码除了 reply_to 之外一切正常,我想要一个动态值,但我不知道怎么做。

params @name,@ email,@ message在表单上捕获,我希望reply_to值与从@email传递的params相同。

所以,基本上这一点是有人可以预订一个活动,然后它会将他们的详细信息通过电子邮件发送给活动经理,然后只需按“回复”,它就会回复用户在表格上填写的电子邮件

class BookingMailer < ActionMailer::Base
      default from: "notifications@example.com"
      default reply_to: @email

      def contact_mailer(name,email,message)
        @name = name
        @email = email
        @message = message
        mail(to: 'info@example.com', subject: 'Event Booking', reply_to: @email)
      end
    end

我查看了API文档,但在使用动态值时,它们似乎引用了数据库中的用户。

非常感谢任何帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

如果您想为没有设置选项的方法使用某些内容(例如,您设置了default from:),则只设置默认值,因此您无需设置{{ 1}}每次,如果没有设置,它将使用默认值。

假设您的控制器将电子邮件地址作为第二个参数传递,那么您的代码应该可以正常工作,但通常我会通过预订:

mail(from: "notifications@example.com"...)

然后从邮件中提取您想要的信息:

class BookingController < ApplicationController
  def create
    @booking = Booking.new(safe_params)
    if @booking.save
      BookingMailer.contact_mailer(@booking).deliver
    else
      # alarums!
    end
  end
end

理想情况下,您应该删除行class BookingMailer < ActionMailer::Base default from: 'blah@blah.com' def contact_mailer(booking) @booking = booking mail(to: 'info@example.com', subject: 'Event booking', reply_to: @booking.email) end end ,因为它正在尝试使用级别实例变量default reply_to: @email,而不是您想要的实例变量@email 。有关类变量,实例变量和类实例变量之间差异的示例,请参见此处:http://www.railstips.org/blog/archives/2006/11/18/class-and-instance-variables-in-ruby/