2011-08-27 67 views
5

我试图显示特定订单的里程碑列表。 (订单有许多里程碑。)Rails3我如何使用:在命名范围内的参数?

我的订单模式,我有这样的:

scope :open, lambda { 
    joins("join milestones on milestones.order_id = orders.id"). 
     where("order_id = ? AND milestone_status = ?", :params[:order_id], true). 
     group("orders.id") 
    } 

我有越来越当前订单ID工作的问题 - :PARAMS [:ORDER_ID]显然是错误。

在我的路线我有这样的:

resources :orders do 
    resources :milestones 
    end 

而且我的网址如下:

http://127.0.0.1/orders/2/milestones

这怎么可能?我已通过手动替换订单ID来测试范围。

- 编辑 -

按照下面的建议,我已经把我的里程碑控制器如下:

@orders = Order.open(params[:order_id]) 

而且在我看来,我有这样的:

< %@ orders.each do | open | %>

但我得到一个错误:

wrong number of arguments (1 for 0) 

完整的堆栈跟踪是在这里:http://pastie.org/2442518

+0

添加完整的堆栈跟踪。 –

+0

会做。刚刚弹出。稍后再粘贴。再次感谢 –

+0

@ Mauricio-Linhares。已经用完整的跟踪编辑了我的答案 - 感谢您的帮助。 –

回答

4

将其定义是这样的:

scope :open, lambda { |order_id| 
joins("join milestones on milestones.order_id = orders.id"). 
    where("order_id = ? AND milestone_status = ?", order_id, true). 
    group("orders.id") 
} 

,并调用它的控制器是这样的:

def index 
    @orders = Order.open(params[:order_id]) 
end 
+0

谢谢。已经把里程碑控制器,但我得到一个错误。已更新我的问题。 Jx –

+0

您是否已将'| order_id |'部分添加到lambda? – Eric

+0

@Eric - yep,如上所述。 –