2009-12-22 32 views
6

Sembra che l'impostazione di più variabili di istanza nell'azione (metodo) di un controllore causi problemi nel modello, solo la prima variabile di istanza è stata passata al modello. C'è un modo per passare più variabili al modello? Grazie! E perché, nella prospettiva di Ruby, il modello ottiene l'accesso alle variabili di istanza in un'azione?Come passare i parametri da un controller a un modello?

risposta

4

Si potrebbe anche voler esaminare l'opzione: locals del rendering. Che accetta un hash in modo tale che le chiavi siano simboli che si associano ai nomi di variabili locali nel modello e che i valori siano i valori in cui impostare le variabili locali.

Esempio:

render "show", :locals => {:user => User.first, :some_other_variable => "Value"} 

e questo modello

User ID: <%= user.id %><br> 
Some Other Variable: <%=some_other_variable%> 

produrranno:

User ID: 1<br> 
Some Other Variable: Value 

Quando si sta riutilizzando parziali su più controller. L'impostazione delle variabili locali con l'opzione: locals è più semplice e molto più DRY rispetto all'utilizzo di variabili di istanza.

4

non dovresti avere problemi a impostare più variabili di istanza. Per esempio:

class CarsController < ApplicationController 
    def show 
    @car = Car.find(:first) 

    @category = Category.find(:first) 
    end 
end 

vi permetterà di accedere sia @car e @category in auto/show.html.erb

Il motivo per cui funziona è nulla di inerente al rubino, ma qualcosa di magico integrato in binari. Rails rende automaticamente qualsiasi variabile di istanza impostata in un'azione del controller disponibile per la vista corrispondente.

Problemi correlati