2014-09-10 84 views
0

我正在建立一個市場應用程序,賣家可以列出要銷售的物品。我已經設置了ActionMailer來發送訂單確認電子郵件,該電子郵件在order.save上觸發。我現在正在嘗試設置送貨確認電子郵件,當賣家點擊一個按鈕表示該物品已發貨時,將會觸發該送貨確認電子郵件。Rails 4 - ActionMailer發送送貨確認電子郵件

我遇到了傳遞給ActionMailer的數據。在下面的郵件發送方法中,我在@order.buyer.email上收到undefined method 'buyer'錯誤。我如何將買家信息傳遞給郵件?

我還想將列表數據傳遞給郵件程序,以便我可以在郵件內容中使用列表詳細信息。

模型信息:我有一個用戶模型,一個上市模型和一個訂單模型。訂單模型包含一個buyer_id列,該列是用戶模型的外鍵,而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: "[email protected]", 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 

回答

1

你定義你的shipconf行動@order變量的地方?

如果沒有,你必須定義它,例如像這樣:

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

,改變你的鏈接:

shipconf_path(id: order.id) 
+0

在我的按鈕,我通過以該方法'shipconf_path(順序)'。這不夠嗎?我嘗試了你的建議,但我得到一個錯誤,說'找不到沒有ID的訂單' – Moosa 2014-09-10 18:32:22

+0

不,這是不夠的!您可以在鏈接中傳遞訂單或order_id,以便您可以在操作中搜索它。嘗試'Order.find(params [:order_id])' – crispychicken 2014-09-10 18:37:28

+0

明白了。謝謝。我不得不說'shipconf_path(id:order.id)' – Moosa 2014-09-10 18:43:02

相關問題