0

我被卡住了(对 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')

它确实显示了最后一条消息和第一条消息的正确日期,但是一旦我添加订单它就会中断......

4

1 回答 1

0

在向查询中添加 order 子句后,包含您获得的错误信息可能会有所帮助。

但是,我可以在代码中发现一些奇怪的东西。该CategoriesMessage模型似乎只是为了满足一个类别可以包含许多消息的条件,反之亦然。你不需要模型来处理这种多对多关系,Rails 会自动为你处理。

您的模型应如下所示:

class Message < ActiveRecord::Base
 attr_accessible :updated_at
 has_and_belongs_to_many :categories
end

class Category < ActiveRecord::Base
 attr_accessible :name
 has_and_belongs_to_many :messages
end

在您的数据库中,您有这些表:messagescategories,categories_messages , where the last one is the join table which only contains columns for amessage_id and acategory_id`。

然后你可以简单地在你的代码中做这样的事情:

category.messages.each { |message| puts message.updated_at }

另请参阅这篇 Ruby on Rails 教程文章以获取更多信息。如果这对您不起作用,请发布您得到的确切错误。

于 2013-01-27T19:45:53.200 回答