has_many через несколько моделей с уникальным источником - PullRequest
7 голосов
/ 14 декабря 2011

Чтобы взять пример, с которым все знакомы, подумайте о StackOverflow. Пользователь has_many :questions, has_many :answers и его вопросы и ответы могут комментировать. (Комментарий полиморфный).

Я хочу получить все ответы, адресованные конкретному пользователю, через комментарий к его вопросам или ответам:

class User < ActiveRecord::Base
  has_many :questions
  has_many :answers
  has_many :comments
  has_many :responses, through: [:questions, :answers], source: :comments
end

class Question < ActiveRecord::Base
  belongs_to :user
  has_many :answers
  has_many :comments, as: :commentable
end

class Answer < ActiveRecord::Base
  belongs_to :user
  belongs_to :question
  has_many :comments, as: :commentable
end

class Comment < ActiveRecord::Base
  belongs_to :commentable, polymorphic: true
end

Конечно, has_many :responses, through: [:questions, :answers], source: :comments не работает.

Есть ли способ Rails сделать это?

Спасибо.

1 Ответ

1 голос
/ 15 декабря 2011
has_many :responses, :class_name => "Comment", :finder_sql =>
          'SELECT DISTINCT comments.* ' +
          'FROM comments c, questions q, answers a ' +
          'WHERE (c.commentable_id = a.id and c.commentable_type='Answer' and a.user_id = #{id} ) or (c.commentable_id = q.id and c.commentable_type='Question' and q.user_id = #{id})'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...