2011-01-21 16 views
10

Qual è il modo migliore per aggiornare un determinato attributo del modello?Ricarica un attributo modello

cioè funzionalmente, voglio che questo:

post.body = Post.find(post.id).body 

con una sintassi più bello. Forse

post.reload_body! 

Edit: voglio solo ricaricare un singolo attributo di(non tutti gli attributi in una volta)

+0

Cosa vuol dire essere rinfrescante un attributo del modello? Qual è il contesto? – Maz

+0

Il titolo della domanda e il contenuto sono in conflitto. Vuoi aggiornare solo l'attributo specificato o è ok per aggiornarli tutti? – Heikki

+0

@Heikki: l'attributo specificato (ho aggiornato la domanda per renderla più chiara) –

risposta

9

mi batte perché ci si vuole fare una cosa del genere, ma:

Invia un numero SELECT che recupera solo una colonna e assegna il suo valore all'attributo nell'istanza del modello corrente. Chiamata con (ad esempio):

post = Post.find(1) 
post.reload_attribute(:body) 

Davvero, però, si dovrebbe andare con post.reload (doc). A meno che non si dispone di un enorme ampie colonne che impongono un certo costo delle prestazioni a fare SELECT *

+0

questo sarà anche un problema se si dispone (per esempio) di accessori personalizzati ecc. – Peter

+1

Il caso d'uso che vedo è di evitare di cancellare anche la cache delle relazioni. Se aggiorno solo un attributo dell'oggetto, le relazioni già caricate non attiveranno successivamente una nuova chiamata SQL. – Mathiou

-1

Rails 4 ha una risposta semplice per questo

post.body(reload: true) 

in Rails 5.1 questo è

post.reload_body 
+0

Non penso che funzioni con gli attributi, solo con le relazioni (almeno per la sintassi Rails 4). – Mathiou