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
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 –