Je suis coincé avec cela pendant quelques heures. Ce pourrait être une solution rapide mais mon cerveau est surchauffé maintenant. Ok c'est ici.Comment sélectionner un enregistrement spécifique parmi les relations Plusieurs-à-plusieurs qui ne contient pas d'élément spécifique dans Rails 2?
J'ai des modèles Session et SessionType qui ont des relations plusieurs-à-plusieurs les uns avec les autres comme suit.
class Session < ActiveRecord::Base
...
has_and_belongs_to_many :session_types
...
end
class SessionType < ActiveRecord::Base
...
has_and_belongs_to_many :sessions
...
end
Ce que je veux est d'obtenir une session qui ne contient pas de session_type spécifique, par exemple.,
Session.find(:all, :joins => [:session_types], :conditions => ["session_types.id <> 44"])
Il ne fonctionne pas pour moi depuis que la requête ci-dessus me donne encore la sessions qui ont session_types.id "44" dans plusieurs de ses associations en raison de la nature des relations plusieurs-à-plusieurs.
Le code mysql suivant ne fonctionne pas aussi bien.
select sessions.* from sessions
INNER JOIN `session_types_sessions` ON `session_types_sessions`.session_id = `sessions`.id
WHERE ( session_types_sessions.session_type_id NOT IN (44))
GROUP BY sessions.id
Toute aide sera appréciée.
Merci.
Oui cela fonctionne très bien avec un peu de changement de syntaxe car j'ai une erreur de syntaxe autour de la jointure. session_types_44 = Session.find (: all,: jointures =>: session_types,: conditions => {: "session_types.id" => 44}). uniq Session.find (: all,: conditions => ["ID NOT IN (?) ", session_types_44.collect {| s | s.id}]) –