2014-02-19 2 views
0

У меня есть три модели, которые необходимо объединить (есть 4 модели в игре, но мне нужно присоединиться только к трем из них). 4 модели - это пользователь, ключевое слово, вопрос, ассоциация..Соединения с тремя моделями

Эти отношения в моделях

  1. Пользователь имеет много ключевых слов через ассоциации
  2. Ключевое слово имеет много пользователей через ассоциации
  3. Ключевое слово имеет много вопросов
  4. Вопросы относятся к ключевому слову

Модели -

class User < ActiveRecord::Base 
    has_many :associations, dependent: :destroy 
    has_many :keywords, :through => :associations 

class Keyword < ActiveRecord::Base  
    has_many :associations, dependent: :destroy 
    has_many :users, :through => :associations 

    has_many :questions, dependent: :destroy 

class Association < ActiveRecord::Base 
    belongs_to :keyword 
    belongs_to :user 

class Question < ActiveRecord::Base 
    belongs_to :keyword 

Теперь мне нужно получить все вопросы по ключевым словам для конкретного пользователя (например, user_id = 2) с использованием .joins.

Любая идея, как я могу достичь этого.

ответ

1

Пожалуйста, попробуйте следующее:

Question.joins(keyword: [:user]).where(users: {id: 2}) 
+0

Это дает мне ошибку - «Ассоциация с именем« пользователь »не была найдена в ключевом слове, возможно, вы ее написали?» – amey1908

+0

На самом деле это сработало хорошо, за исключением того, что мне нужны детали из обеих вопросов и таблицы ключевых слов. Подробности о вопросах получаются в порядке, но данные ключевых слов не отображаются. Я также попытался добавить .includes (: keyword) безрезультатно. Любые предложения по этому поводу? Какую же цель выполняют квадратные скобки вокруг пользователя? – amey1908

+0

Я использовал ваш код, так как мне нужны подробности о вопросе. Также я добавил к нему выбор, чтобы выбрать поля из таблицы ключевых слов. «Queryion.joins (ключевое слово: [: users]). Select (« keywords.keyword, questions. * »). Where (" users.id = @ user.id) ' – amey1908

1

Вы должны использовать

Keyword.joins(:questions, :users).includes(:questions).where(users: {id: 2}) 
+0

Когда я бегу Keyword.joins (: вопросы,: пользователи) .includes (: вопросы) .гд (пользователи: {идентификатор : 2}). To_sql on rails Я получаю следующий вывод. Поскольку вы можете видеть, что выбранная часть SQL не содержит вопросов. Любые причины, почему? SELECT \ "keywords \". * FROM \ "keywords \" INNER JOIN \ "questions \" ON \ "вопросы \". \ "Keyword_id \" = \ "keywords \". \ "Id \" INNER JOIN \ "ассоциации \ "ON \" ассоциации \ ". \" Keyword_id \ "= \" keywords \ ". \" Id \ "INNER JOIN \" users \ "ON \" users \ ". \" Id \ "= \" association \ ". \" user_id \ "WHERE \" users \ ". \" id \ "= 2 – amey1908

+0

Казалось, что это работает' Keyword.joins (: questions,: users) .select ("questions. *"). где (пользователи : {id: 2}) ' – amey1908

+0

:). Вы не можете видеть запрос 'include', используя' to_sql'. –

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