2011-08-27 13 views
5

Sto provando a visualizzare un elenco di pietre miliari per un ordine particolare. (Ordini sono molti traguardi.)Rails3 Come posso usare: params in scope con nome?

Nel mio modello ordini, ho questo:

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

Il problema che sto avendo è sempre l'identificazione di ordine corrente di lavorare -: params [: order_id] è chiaramente sbagliato.

Nei miei itinerari ho questo:

resources :orders do 
    resources :milestones 
    end 

E mio URL è la seguente:

http://127.0.0.1/orders/2/milestones

Come è possibile? Ho testato lo scope sostituendo manualmente un ID ordine.

- EDIT -

Come da consigli qui sotto, ho messo il seguente nel mio controller pietre miliari:

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

E a mio avviso, ho questo:

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

Ma ottengo un errore:

wrong number of arguments (1 for 0) 

Lo stacktrace completo è qui: http://pastie.org/2442518

+0

Aggiungere la traccia dello stack completo. –

+0

Lo farà. Sono appena spuntato. Incollerà più tardi. Grazie ancora –

+0

@ Mauricio-Linhares. Ho modificato la mia risposta con la traccia completa - grazie per l'aiuto. –

risposta

4

Definire in questo modo:

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

e lo chiamano sul controller come questo :

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

Grazie. Ho inserito il controller delle pietre miliari, ma ottengo un errore. Ho aggiornato la mia domanda. Jx –

+0

Hai aggiunto la parte '| order_id |' al lambda? – Eric

+0

@Eric - sì, seguito come sopra. –

Problemi correlati