Ordinamento complesso di has_many


#1

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.

ora ho definito cosi:

has_many :topics,
:dependent => :delete_all,
:order => “update_at DESC”

il fatto è che i post di ciascun forum dovrebbero essere caricati in
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??

grazie a tutti


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away


#2

On 4/20/07, tarini removed_email_address@domain.invalid wrote:

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.

M

grazie a tutti


#3

Il 20/04/07, Matteo V. removed_email_address@domain.invalid ha scritto:

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…

M

http://lists.ruby-it.org/mailman/listinfo/ml


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away


#4

On 4/20/07, tarini removed_email_address@domain.invalid wrote:

ragazzi come prova sto implementando un forum con rails e ho trovato il

Sai che esistono gia` cose del genere, vero?

http://beast.caboo.se/

Conoscete altri che vi sembrano buoni?


David N. Welton

Linux, Open Source Consulting


#5

Il 20/04/07, David W. removed_email_address@domain.invalid ha scritto:

On 4/20/07, tarini removed_email_address@domain.invalid wrote:

ragazzi come prova sto implementando un forum con rails e ho trovato il

Sai che esistono gia` cose del genere, vero?

http://beast.caboo.se/

Conoscete altri che vi sembrano buoni?

sisi… lo voglio fare più che altro per imparare… e magari
contribuire a rubyforge

David N. Welton

Linux, Open Source Consulting


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away


#6

Il 20/04/07, tarini removed_email_address@domain.invalid ha scritto:

come posso fare?? devo scrivere a manina un JOIN nel :finder_sql??

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


#7

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.

M



#8

hai ragione… provvedo subito :slight_smile:

Il 21/04/07, Matteo V. removed_email_address@domain.invalid ha scritto:

thanks
Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away


#9

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.


#10

Il 22/04/07, Rob C. removed_email_address@domain.invalid ha scritto:

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

On 21/04/07, Matteo V. removed_email_address@domain.invalid wrote:

Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml


everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away