23-10-2009, 08:10 PM
(Modification du message : 30-10-2009, 01:39 PM par Sephi-Chan.)
J'ai rajouté quelques notes à propos de passage d'arguments.
En écrivant cette tâche pour le boulot, je me suis rendu compte que la version de Rails que j'utilisais n'incluait pas encore les dynamic scopes.
J'ai donc eu plusieurs options :
Les finders dynamiques :
La requête à base d'une chaîne de caractère avec des placeholders anonymes :
La requête à base d'une chaîne de caractère avec des placeholders nommés :
La requête avec une condition sous forme de hash :
En écrivant cette tâche pour le boulot, je me suis rendu compte que la version de Rails que j'utilisais n'incluait pas encore les dynamic scopes.
J'ai donc eu plusieurs options :
Les finders dynamiques :
tv_programs = TvProgram.find_all_by_air_time_and_tv_program_kind_id_and_channel_id(from..to, tv_program_kinds, channel_ids)
La requête à base d'une chaîne de caractère avec des placeholders anonymes :
condition = "air_time IN(?) AND tv_program_kind_id IN (?) AND channel_id IN (?)"
tv_programs = TvProgram.all :conditions => [
condition,
from..to,
tv_program_kind_ids,
channel_ids
]
La requête à base d'une chaîne de caractère avec des placeholders nommés :
condition = "air_time IN(:time) AND tv_program_kind_id IN (:tv_program_kind_ids) AND channel_id IN (:channel_ids)"
tv_programs = TvProgram.all :conditions => [
condition,
{
:time => from..to,
:tv_program_kind_ids => tv_program_kind_ids,
:channel_ids => channel_ids
}
]
La requête avec une condition sous forme de hash :
tv_programs = TvProgram.find :all,
:conditions => {
:air_time => date_from..date_to,
:tv_program_kind_id => tv_program_kind_ids,
:channel_id => channel_ids
}