Имеются три модели:
class Category < ActiveRecord::Base
has_many :posts, dependent: :destroy
has_many :comments, through: :posts, dependent: :destroy
end
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
belongs_to :category
end
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :category
end
Мне необходимо извлечь определенную категорию (params[:id]), все посты этой категории, а также количество комментариев на каждый пост и последний комментарий к каждому посту. Как это сделать максимально эффективно (по памяти, производительности)?
На данный момент реализованно так:
def show
@category = Category.includes(:comments, :posts).find(params[:id])
end
В шаблоне вывожу соответственно:
<h1>@category.name</h1>
<% @category.posts.each do |post| %>
<%= post.name %>
<%= post.comments.count %> <!-- либо post.comments.size, работаем с массивом, не делаем лишние запросы -->
<%= post.comments.last.body %>
<% end %>
Понимаю, что все комментарии загружаются полностью, хотя нужны к каждому посту только последние и их количество. Если постов в категории много и комментариев в каждом посте, то соответственно это не есть хорошо. Если использовать joins вместо includes, то получается много запросов в БД. Перелопатил весь стэковерфлоу и рэйлскастс, но решения не нашел, либо попадалось на rails3 и задачи немного не те. Мне нужно на rails 4. Надеюсь на вашу помощь, вторые сутки не сплю.
Спасибо заранее.