2011-10-26 29 views
0

我在嘗試通過控制檯我得到我想要的東西用的ActionMailer的ActionMailer失敗

NoMethodError in OrdersController#deliver 
undefined method `client' for #<OrdersController:0x007fdc22aa4938> 

我梅勒

class OrdersMailer < ActionMailer::Base 
def email_copy_of_order_to_client(order) 
    @order = order 
    @client = @order.client 
    mail(:to => @client.email, :subject => "Your order") 
    end 

當然發送電子郵件時,沒有方法錯誤

Order.last.client 
    Order Load (0.2ms) SELECT "orders".* FROM "orders" ORDER BY "orders"."id" DESC LIMIT 1 
    => #<Client id: 3, name: "Test Client", address1: "", address2: "", city: ""...` 

EDITED

class OrdersController < InheritedResources::Base 
def deliver 
@email = OrdersMailer.email_copy_of_order_to_client(self).deliver 

respond_to do |format| 
    if @email.valid? 
    format.html { redirect_to order, notice: 'Order was successfully sent.' } 
    else 
    format.html { render action: "show", alert: 'An error occured. Please try again.' } 
    end 
end 
end 

訂單號放映視圖

​​

任何想法?

+0

請參見上面我貼的所有代碼。 Thx – Gaelle

回答

1

你的郵件要一個訂單作爲它的參數:

class OrdersMailer < ActionMailer::Base 
    def email_copy_of_order_to_client(order) 
    #... 

但你給它OrderController的一個實例:

class OrdersController < InheritedResources::Base 
    def deliver 
    @email = OrdersMailer.email_copy_of_order_to_client(self).deliver 
    #... 

self是控制器的一個實例,而不是Order的一個實例。因此,有關OrdersController您的錯誤信息:

undefined method `client' for #<OrdersController:0x007fdc22aa4938> 

你可能想在你的deliver是這樣的:

def deliver 
    order = Order.find(params[:id]) 
    # check access/ownership/... on order 
    @email = OrdersMailer.email_copy_of_order_to_client(order).deliver 
    #... 
+0

非常感謝。奇蹟般有效。幾個月前曾在惠斯勒加拿大同胞。乾杯。 – Gaelle

+0

@ Gaelle:乾杯,呃。今天早上我們下了雪,嗚呼! –

+0

等不及要在這裏得到奧特的雪。 – Gaelle