2010-06-24 9 views
8

Appena iniziato a imparare Rails (3). Mi sto strappando i capelli cercando di scoprire come fare qualcosa che è presumibilmente del tutto banale: accedi al valore del campo di un'istanza di modello, da un metodo su quel modello.Rails: accesso al valore del campo dal metodo model

Nel mio caso:

def formal_name 
    @title + " " + @forename + " " + @surname 
end 

Tutti e tre i @properties (che sono tutti i campi della tabella nel database) restituiscono nil. Non dovrebbero

Incredibilmente, come accedere ai campi non è discusso allo http://guides.rails.info/ e Google non restituisce nulla.

BTW, vengo da Django dove questa roba è ovvia.

risposta

10

La sintassi @ viene utilizzata per le variabili di istanza che (ad esempio) vengono popolate nei controller e quindi utilizzate nelle viste. Non quello che stai facendo qui.

È in realtà solo bisogno

def formal_name 
    title + " " + forename + " " + surname 
end 
0

Devi omettere @, puoi accedervi tramite i metodi getter. In alcuni casi è necessario utilizzare self.<field> a causa di ambiguità.

0
class MyModel << ActiveRecord 

    def formal_name 
    title = self.title # return title attribute of instance 
    forename = self.forename 
    surename = self.surname 

    # or something like this 
    self.title + self.surename 
    end 

end 
+1

Perché 'self.fieldname' qui e proprio' fieldname' nell'altra risposta? "Sé" ti consente di essere più specifico sull'ambito di applicazione? per esempio. se dovessi dichiarare una variabile locale nel metodo con lo stesso nome del campo? –

Problemi correlati