2011-08-27 34 views
5

Tôi đang cố gắng hiển thị danh sách các cột mốc cho một đơn đặt hàng cụ thể. (Đơn đặt hàng có nhiều sự kiện quan trọng.)Rails3 Làm thế nào tôi có thể sử dụng: params trong phạm vi được đặt tên?

Trong mô hình đơn đặt hàng của tôi, tôi có điều này:

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") 
    } 

Vấn đề tôi đang gặp là nhận được ID trật tự hiện hành để làm việc -: params [: order_id] rõ ràng là sai rồi.

Trong các tuyến đường của tôi, tôi có điều này:

resources :orders do 
    resources :milestones 
    end 

Và url của tôi là như sau:

http://127.0.0.1/orders/2/milestones

Làm thế nào có thể như vậy? Tôi đã thử nghiệm phạm vi bằng cách thay thế bằng ID đơn hàng theo cách thủ công.

- EDIT -

Theo lời khuyên dưới đây, tôi đã đặt sau đây trong sự kiện quan trọng điều khiển của tôi:

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

Và theo quan điểm của tôi, tôi có điều này:

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

Nhưng tôi nhận được một lỗi:

wrong number of arguments (1 for 0) 

Các stacktrace đầy đủ là ở đây: http://pastie.org/2442518

+0

Thêm dấu vết ngăn xếp đầy đủ. –

+0

Sẽ làm. Chỉ xuất hiện. Sẽ dán sau. Cảm ơn một lần nữa –

+0

@ Mauricio-Linhares. Đã chỉnh sửa câu trả lời của tôi với dấu vết đầy đủ - cảm ơn sự giúp đỡ. –

Trả lời

4

Xác định nó như thế này:

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") 
} 

Và gọi nó trên bộ điều khiển của bạn như thế này :

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

Cảm ơn. Đã đặt trong bộ điều khiển sự kiện quan trọng nhưng tôi gặp lỗi. Đã cập nhật câu hỏi của tôi. Jx –

+0

Bạn đã thêm phần '| order_id |' vào lambda chưa? – Eric

+0

@Eric - yep, tiếp theo như trên. –

Các vấn đề liên quan