2014-02-04 1 views
2

Я пытаюсь получить все товарные бренды, которые имеют часть, принадлежащую названной категории (category.name = «автомобиль»), через многие для многих отношений.Выбирайте значения между многими или многими отношениями в активной записи, используя «где»

Вот модели:

class Brand < ActiveRecord::Base 
    has_many :brand_parts 
    has_many :parts, through: :brand_parts 
end 

-

class Category < ActiveRecord::Base 
    has_many :parts 
end 

-

class Part < ActiveRecord::Base 
    belongs_to :category 

    has_many :brand_parts 
    has_many :brands, through: :brand_parts 
end 

-

class BrandPart < ActiveRecord::Base 
    belongs_to :brand 
    belongs_to :part 
end 

Update: Ответ ниже прибил его

Вот это то, что я получил до сих пор:

Part.joins(:category).joins(:brands).where(category: {name: 'car'}).select(brands.name).distinct 

Запрос выводит (перечислены ниже) прекрасно работает в PG админ, но через активную запись вместо того, чтобы быть в состоянии видеть названия бренда, я просто получить результирующий набор, который выглядит следующим образом:

#<Part id: nil> 
#<Part id: nil> 
#<Part id: nil> 
+0

Любая вероятность того, что вы используете PostGreSQL ..? – MrYoshiji

+0

Да, я уверен, это :) – newUserNameHere

+0

Perfect :) дайте мне 5mn – MrYoshiji

ответ

3

была протестирована @newUserNameHere и на самом деле работает:

scope = Brand.joins(parts: :category).where(categories: { name: 'car' }) 
scope = scope.select('DISTINCT brands.name').order('brands.name') 

brand_names_appearing_in_car_category = scope.map(&:name) 
+0

Спасибо !!! Хотелось бы поиграть с ним немного, чтобы заставить его работать (отличные от него выброшены), но вот рабочий запрос (вся одна строка, потому что это комментарий): Brand.joins (parts:: category) .where (категории : {name: 'car'}). select ("distinct brands.name"). order ('brands.name'). map (&: name) – newUserNameHere

+0

Забыл изменить «Не проверено», поскольку он был протестирован и рабочий :) Еще раз спасибо! – newUserNameHere

+1

Хорошо спасибо за ваш вход @newUserNameHere – MrYoshiji

Смежные вопросы