2011-08-27 6 views
5

Próbuję wyświetlić listę kamieni milowych dla określonego zamówienia. (Zamówienia mają wiele kamieni milowych.)Railsy 3 Jak używać: parametry w nazwanym zakresie?

W moim modelu zamówień, mam to:

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

Problem mam jest coraz bieżący identyfikator aby pracować -: params [: ORDER_ID] jest wyraźnie źle.

W moich trasach mam to:

resources :orders do 
    resources :milestones 
    end 

A mój adres URL jest następujący:

http://127.0.0.1/orders/2/milestones

Jak to możliwe? Przetestowałem zakres, zastępując ręcznie identyfikator zamówienia.

- EDIT -

Zgodnie z radą poniżej, mam umieścić następujące w moim kontroler kluczowych etapów:

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

I moim zdaniem, mam to:

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

ale pojawia się błąd:

wrong number of arguments (1 for 0) 

Pełne StackTrace jest tutaj: http://pastie.org/2442518

+0

Dodaj pełne śledzenie stosu. –

+0

To zrobię. Właśnie wyskoczyłem. Wklei później. Jeszcze raz dziękuję –

+0

@ Mauricio-Linhares. Zmieniłem moją odpowiedź z pełnym śladem - dziękuję za pomoc. –

Odpowiedz

4

zdefiniować tak:

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

i nazywają to na kontrolerze jak ta :

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

Dzięki. Wprowadziłem kontroler kamieni milowych, ale pojawia się błąd. Mam zaktualizowane moje pytanie. Jx –

+0

Czy dodałeś część '| order_id |' do lambda? – Eric

+0

@Eric - tak, postępuj jak powyżej. –

Powiązane problemy