ragazzi come prova sto implementando un forum con rails e ho trovato il
primo problema nella definizione dei modelli.
cerco di essere chiaro e sintetico:
ho 3 modelli (forum, topic e post) e ciascuno di essi include una
collection
del modello sottostante (un forum ha N topic, un topic ha N post).
Ovviamente esiste anche la situazione contraria (un post appartiene ad
un
topic, un topic appartiene ad un forum).
Il mio problema deriva nella clausula :order all’interno del modello
Forum.
ordine
di data non “propria” ma dell’ultimo post al quale fanno riferimento.
come posso fare?? devo scrivere a manina un JOIN nel :finder_sql??
O quello (magari con una find_by_sql) oppure denormalizzi il db e ti
tieni
una copia della “data di ultima modifica” del topic, aggiornata nella
after_save del post.
Ovviamente esiste anche la situazione contraria (un post appartiene ad
:order => “update_at DESC”
after_save del post.
a sto punto mi sa che accetto l’idea della denormalizzazione del db…
per dovere di cronaca riporto quello che ho realizzato con successo
after_save :updateTopic
def updateTopic
topic.last_updated_at = Time.now
topic.save
end
thanks
Potenza di ActiveRecord! Ho un solo appunto: perché non passi allo stile
standard di Ruby? “update_topic” invece che updateTopic… Ci metterai
un
attimo ad abituarti, e il tuo codice sarà più gradito alle moltitudini.
Stai usando after_save nel controller o nel model? Potresti usare
before_save nel model perché questa funziona viene chiamato quando il
modello è valido.
class Topic
def before_save
self.last_updated_at = Time.now
end
end
Altrimento invece di last_updated_at usa updated_at e ActiveRecord
farà tutto lui in automatico.
Stai usando after_save nel controller o nel model? Potresti usare
before_save nel model perché questa funziona viene chiamato quando il
modello è valido.
class Topic
def before_save
self.last_updated_at = Time.now
end
end
io la sto usando nel model Post in quanto il campo rappresenta la data
di
creazione dell’ultimo post appartenente al topic
Altrimento invece di last_updated_at usa updated_at e ActiveRecord
farà tutto lui in automatico.
non mi serve… a me serve modificare il campo quando viene creato un
post
appartenente al topic