【问题标题】:Rails 4 - ActionMailer Send Shipping Confirmation EmailRails 4 - ActionMailer 发送发货确认邮件
【发布时间】:2014-09-11 02:45:27
【问题描述】:

我正在构建一个市场应用程序,卖家可以在其中列出要出售的商品。我已设置 ActionMailer 以发送在order.save 触发的订单确认电子邮件。我现在正在尝试设置一个发货确认电子邮件,当卖家点击一个按钮以表明该项目已发货时将触发该邮件。

我卡在传递给 ActionMailer 的数据上。在下面的邮件方法中,@order.buyer.email 出现undefined method 'buyer' 错误。如何将买家信息传递给邮寄者?

我还想将列表数据传递给邮件程序,以便我可以在电子邮件内容中使用列表详细信息。

模型信息:我有一个用户模型、一个列表模型和一个订单模型。 order模型有一个buyer_id列,它是User模型的外键和listing_id,它是listing模型的外键。用户的电子邮件存储在 User 模型中。

这是我的代码:

#route
get 'shipconf' => "orders#shipconf"

#order_controller
def shipconf
  AutoNotifier.shipconf_email(@order).deliver
end

#AutoNotifier.rb
def shipconf_email(order)
   @order =  order
   mail(to: @order.buyer.email, bcc: "ashfaaqmoosa@gmail.com", subject: 'You have a new order at Outfit Additions.')
end

#sellers admin view table with order info. seller clicks button to send mail.
  <% @orders.each do |order| %>
    <tr>
      <td><%= order.id %></td>
      <td><%= link_to order.listing.name.downcase.titleize, order.listing, data: { no_turbolink: true } %></td>
      <td><%= number_to_currency(order.listing.price) %></td>
      <td><%= order.shipaddress %></td>
      <td><%= best_in_place order, :tracking, :type => :input, :url => listing_order_path(id: order.id, listing_id: order.listing_id) %> </td>
      <td><%= link_to "Send Email", shipconf_path(order), class: "btn btn-sm btn-primary" %></td>
    </tr>
  <% end %>

#order model
belongs_to :listing
belongs_to :buyer, class_name: "User"
belongs_to :seller, class_name: "User"

#user model
has_many :listings, dependent: :destroy
has_many :orders, class_name: "Order", foreign_key: "seller_id"
has_many :purchases, class_name: "Order", foreign_key: "buyer_id"

#listing model
belongs_to :user
has_many :orders

【问题讨论】:

    标签: ruby-on-rails actionmailer


    【解决方案1】:

    您是否在某处为您的 shipconf 操作定义了 @order 变量?

    如果不是你必须定义它,例如这样:

    #order_controller
    def shipconf
      @order = Order.find(params[:id])
      AutoNotifier.shipconf_email(@order).deliver
    end
    

    并将您的链接更改为:

    shipconf_path(id: order.id)
    

    【讨论】:

    • 在我的按钮中,我将订单传递给方法shipconf_path(order)。这还不够吗?我尝试了您的建议,但收到错误消息 could not find order without an ID
    • 不,这还不够!您在链接中传递订单或 order_id,以便您可以在操作中搜索它。试试Order.find(params[:order_id])
    • 我明白了,传递(顺序)有什么问题。我认为这会传递包括 id 在内的整个订单记录。
    猜你喜欢
    • 2014-12-31
    • 2014-01-13
    • 2016-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多