2011-10-26 30 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