2011-01-06 5 views
1

Lassen Sie uns sagen, dass ich das folgende Modell haben:Wie kann ich zwei Bereiche schreiben, die kollidierende Joins haben?

# video.rb 
class Video < ActiveRecord::Base 
    has_many :collection_videos, :dependent => :destroy 
    has_many :collections, :through => :collection_videos 
    named_scope :in_collection_one, 
       :joins => :collection_videos, 
       :conditions => "collection_videos.collection_id = 1" 

    named_scope :in_foo_collections, 
       :joins => :collections, 
       :conditions => "collections.foo = true" 
end 

# collections.rb 
class Collection < ActiveRecord::Base 
    has_many :videos, :through => :collection_videos 
    has_many :collection_videos, :dependent => :destroy 
end 

# collection_videos.rb 
class CollectionVideos < ActiveRecord::Base 
    belongs_to :collection 
    belongs_to :video 
end 

Wenn ich den folgenden Anruf:

Video.in_collection_one.in_foo_collections 

ich einen Fehler wird nach Active die SQL-Abfrage beschwerte sich über mehrere tun verbindet aufgebaut hat - es wird versuchen, sich anzuschließen: collection_videos zweimal (falsch, sollte nur einmal beitreten), und: Sammlungen einmal (das ist richtig). Dies wird wahrscheinlich durch einen Fehler in Schienen verursacht, aber ich frage mich, ob es einen Weg gibt.

Hinweis: Ich bin mit Rails/Active Version 2.3.2

Antwort

0

Könnten Sie :include statt :join verwenden? Ein Beispiel für jemanden, der :include für Joins verwendet, finden Sie unter this question.

+1

Dasselbe Problem tritt auf, wenn sich Rails auf eine innere Verknüpfung auf einem: include bezieht. Ich denke, es ist ein Fehler in Rails, wo die Version weniger als 2.3.5 ist –