2011-08-27 69 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,如上所述。 –