Rails 3 has_many через область с объединениями возвращает неожиданные результаты - PullRequest
2 голосов
/ 19 марта 2011

Я пытаюсь создать области, чтобы найти все галереи по определенному типу категории, например «Стиль». В конце концов, они будут связаны для фильтрации по нескольким типам категорий, но я не могу заставить работать первую.

Вот модели:

Галерея:

has_many :gallery_categories, :class_name => "GalleryCategories", :dependent => :destroy
has_many :categories, :through => gallery_categories
has_many :colors, :through => gallery_categories, :source => :category, :conditions => {:type => "Color"}
has_many :styles, :through => gallery_categories, :source => :category, :conditions => {:type => "Style"}

... и многие другие категории ...

Категория:

:has_many :gallery_categories
:has_many :galleries, :through => :gallery_categories

GalleryCategories:

:belongs_to :gallery
:belongs_to :category

Я пытаюсь сделать что-то подобное в Галерее:

:scope :by_style, lambda {|style| joins(:styles).where(:category => {:name => style})}

Тогда, например, я бегу Gallery.by_style ( "Современник")

И мне возвращают 181 галерею, когда есть только 40 галерей, и в этом примере должна быть возвращена только одна со стилем «Современность».

Вот результирующий SQL:

SELECT `galleries`.* FROM `galleries` INNER JOIN `gallery_categories` ON `galleries`.`id` = `gallery_categories`.`gallery_id` INNER JOIN `categories` ON `categories`.`type` = 'Style' WHERE `categories`.`name` = 'Contemporary'

Есть идеи? Заранее спасибо.

...