我被卡住了(对 Rails 还是很陌生),无法弄清楚为什么它不起作用:
我有:
class Message < ActiveRecord::Base
attr_accessible :updated_at
has_many :categories_messages
has_many :categories, through: :categories_messages
end
class CategoriesMessage < ActiveRecord::Base
attr_accessible :category_id, :message_id
belongs_to :category
belongs_to :message
end
class Category < ActiveRecord::Base
attr_accessible :name
has_many :categories_messages
has_many :message, through: :categories_messages
end
@messagesPer = Category.all.includes(:messages).group('categories.id').order("COUNT(messages.id) DESC")
<% @messagesPer.each_with_index do |message, i| %>
<tr>
<td><%= i+1 %></td>
<td><%= message.name %></td>
<% if message.categories_messages.exists? %>
<td><%= message.messages.last.updated_at.to_s.to_date %></td>
<td><%= message.messages.first.updated_at.to_s.to_date %></td>
<td><%= message.messages.count %></td>
<% else %>
<td>0</td>
<td>0</td>
<% end %>
</tr>
<% end %>
所以我希望它显示:类别的名称、最后一条消息的创建日期、第一条消息的创建日期以及该类别中的所有消息。
ALL 工作正常,除了它只显示第一条消息的创建日期,但从不显示最后一条消息(仍然显示最后一条消息的第一个日期)。我究竟做错了什么?
更新:
如果我把
@messagesPer = Category.all.includes(:messages).group('categories.id')
它确实显示了最后一条消息和第一条消息的正确日期,但是一旦我添加订单它就会中断......