我正在构建一个卖家可以列出待售商品的市场应用。我已设置ActionMailer以发送在order.save
上触发的订单确认电子邮件。我现在正在尝试设置发货确认电子邮件,当卖家点击按钮指示商品已经发货时,该电子邮件会被触发。
我被困在传递给ActionMailer的数据上。我在下面的邮件方法中undefined method 'buyer'
收到@order.buyer.email
错误。如何将买家信息传递给邮件程序?
我还希望将商家信息传递给邮寄商,以便我可以在电子邮件内容中使用商品详情。
模型信息:我有一个User模型,一个Listing模型和一个Order模型。订单模型有一个buyer_id列,它是User模型的外键,以及listing_id,它是列表模型的foriegn键。用户电子邮件存储在用户模型中。
这是我的代码:
#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
答案 0 :(得分:1)
您是否为shipconf操作定义了@order
变量?
如果不是,你必须定义它,例如:
#order_controller
def shipconf
@order = Order.find(params[:id])
AutoNotifier.shipconf_email(@order).deliver
end
并将您的链接更改为:
shipconf_path(id: order.id)