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 %>

だから私はそれを表示したい:カテゴリの名前、最後のメッセージが作成された日付、最初のメッセージが作成された日付、およびそのカテゴリのすべてのメッセージ。

最初のメッセージが作成された日付のみが表示され、最後のメッセージは表示されないという事実を除けば、すべて正常に機能します (最後のメッセージには最初の日付が表示されます)。私は何を間違っていますか?

アップデート:

私が入れたら

     @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_messagesmessage_idcategory_id` 。, where the last one is the join table which only contains columns for aand a

次に、コードで次のようなことを簡単に行うことができます。

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

詳細については、このRubyonRailsチュートリアルの記事も参照してください。これがうまくいかない場合は、発生した正確なエラーを投稿してください。

于 2013-01-27T19:45:53.200 に答える