2012-08-04 17 views

risposta

58

Tutti questi dovrebbero funzionare:

user[attribute_name] 
user.read_attribute(attribute_name) 
user.send(attribute_name) 

Personalmente non userei send in questo caso. Quando disponibile, preferiscono public_send per inviare

+0

Concordo che è meglio evitare 'send'. Tuttavia, se si accede a un'associazione piuttosto che a un semplice attributo, sembra che "send" sia la soluzione migliore. – lime

+0

Puoi dirmi perché dovrei evitare "inviare"? Ho paura di doverlo usare. – jmarceli

+1

@ user2041318 con invio è necessario essere più sicuri che sia stato passato un nome dell'attributo reale (piuttosto che, ad esempio, 'destroy') –

1

È possibile utilizzare uno o []read_attribute() ma they are not equivalent. Il metodo di accesso più sicuro utilizza il metodo [] method perché genera un errore ActiveModel::MissingAttributeError se l'attributo non esiste. Lo read_attribute method restituisce nil se l'attributo non esiste.

+1

Il [metodo read_attribute è ancora presente in ActiveRecord 5] (http://api.rubyonrails.org/classes /ActiveRecord/AttributeMethods/Read.html#method-i-read_attribute) e non riesco a trovare alcun suggerimento a proposito della sua deprecazione. – rkallensee

+0

Leggi [questa pagina APIdock] (http://apidock.com/rails/ActiveRecord/AttributeMethods/read_attribute) che afferma quanto segue: _ "Questo metodo è deprecato o spostato sull'ultima versione stabile. L'ultima versione esistente (v2. 3.8). "_ –

+3

È stato appena spostato nel modulo' ActiveRecord :: AttributeMethods :: Read' ed è ancora presente. – rkallensee

0

In Rails 5, solo attribute_name = "name" funziona

Problemi correlati