2011-12-18 7 views
8

Мне нужно запросить все сообщения определенного пользователя и включить все комментарии и пользователя, который относится к комментарию.Rails включает вложенные отношения

class User < ... 
    has_many :posts 
    has_many :comments 
end 

class Post < ... 
    belongs_to :user 
    has_many :comments 
end 

class Comment < ... 
    belongs_to :user 
    belongs_to :post 
end 

@posts = current_user.posts.include(:comments) 

Есть ли возможность получить комментарии пользователя? Я перечисляю много сообщений и комментариев. Я не хочу запрашивать каждого пользователя комментария.

Thx/Tobias

ответ

26

Попробуйте

@posts = current_user.posts.includes(:comments => :user) 

Подробнее об этом here

+1

Можно ли ограничить комментарий в этом запросе. Я хочу только, чтобы 5 последних комментариев были включены. Если я петлю cry.comments.limit (5), выполняется новый запрос – sandelius

+1

В моем ответе: 'Post has_many: comments,: include => [: user],: limit => 5' – clyfe

+0

Да, но я также не хочу получать все комментарии на одной странице или даже разбивать их по страницам? – sandelius

10

Как насчет включать в инструкции определения отношения?

: включает
Указать ассоциации второго порядка, которые должны быть готовы загружены, когда этот объект будет загружен.

class Post < 
    belongs_to :user 
    has_many :comments, :include => [:user], :limit => 5 
end 
+1

Похоже: include is not действительный вариант (по крайней мере, не с Rails 4.1), есть ли альтернатива? – FeifanZ

+0

@FeifanZ это должно быть 'includes'. Он должен работать хорошо, а затем – ahnbizcad

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