2015-02-10 5 views
0

Например, в теме есть много комментариев, и каждый комментарий принадлежит пользователю.Rails: собирать через ассоциацию?

Как я могу заставить всех пользователей прокомментировать одну тему эффективно?

Теперь я делаю это по

@commenters = @topic.comments.collect do |post| 
    user = post.user 
    user 
end 

И, как я могу сделать @commenters Uniq? Включить его в массив?

ответ

1

Вы можете определить through отношение

Rails through association

Тема модель

class Topic < ActiveRecord::Base 
    ... 
    has_many :comments 
    has_many :users, 
    :through => :comments # add this line, it will enable association 
    ... 
end 

комментарий модель

class Comment < ActiveRecord::Base 
    .. 
    belongs_to :topic 
    belongs_to :user 
    .. 
end 

модель пользователя

class User < ActiveRecord::Base 
    ... 
    has_many :comments 
    ... 
end 

затем вы можете найти пользователей по теме.

@topic.users 
+2

С точки зрения того, как сделать их uniq, вы хотите это в рельсах 4 'has_many: users, -> {uniq}, через:: comments' –

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