У меня есть пользователи, посты и комментарии.Пользователь может оставлять только один комментарий к каждому сообщению.
class User < ActiveRecord::Base
has_many :posts
has_many :comments
end
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
На странице пользователя (например, http://host/users/1
) Я хочу показать все сообщения, где данный пользователь прокомментировал.Каждый пост будет иметь все остальные комментарии.
Я могу сделать что-то подобное в моем контроллере пользователя:
def show
@user = User.find(params[:user_id])
@posts = []
user.comments.each {|comment| @posts << comment.post}
end
Таким образом я найду пользователя, затем все его комментарии, затем соответствующую запись для каждого комментария, а затем (в моемview) для каждого поста я буду рендерить post.comments.Я полностью новичок в Rails, так что я могу сделать это =) Но я думаю, что это как-то плохо, и есть лучший способ сделать это, может быть, я должен использовать области или named_scopes (пока не знаю, что это такое, но выглядитстрашно).
Так вы можете указать мне правильное направление здесь?