Вы должны избегать написания сложных бизнес-логин в представлении. В этом случае ваше выполнение достаточно простое, чтобы вы могли написать весь код в своем представлении. Это должно выглядеть так
<% @posts.each do |post| %>
<% @post.comments.all(:limit => 3, :order => "created_at DESC").each do |comment| %>
do something
<% end %>
<% end %>
Есть несколько возможных улучшений. Сначала используйте named_scope.
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
named_scope :recent, proc { |limit| :limit => limit || 3, :order => "created_at DESC") }
# you can also hard-code the limit value (ScottD)
named_scope :recent, :limit => 3, :order => "created_at DESC"
end
<% @posts.each do |post| %>
<% @post.comments.recent.each do |comment| %>
do something
<% end %>
<% end %>
Если я прав, то .each можно удалить.
<% @posts.each do |post| %>
<% @post.comments.recent do |comment| %>
do something
<% end %>
<% end %>
Если вы предпочитаете, вы также можете определить пользовательские отношения (это действительно сложные отношения).