0

各記事のコメント数を article#index に表示しようとしています。

だから私は次のモデルを持っています

resources Article do
 resources Comments do
 end
end

私は各記事で次のことができることを知っています。これはうまくいくでしょう:

@count = @article.comments.find(:all).count

そして、ビューカウントに表示するだけです。しかし、インデックス ファイルにいて、このイベント atm に存在するコメントの数を表示する方法がわからない場合に問題が発生します。

前もって感謝します

4

3 に答える 3

2

article#index では、すべての記事を含むインスタンス変数をループできます。ビューは次のようになります。

@articles.each do |article|
  article.name
  .
  .
  article.comments.count
end
于 2012-08-29T17:16:47.297 に答える
2

article_controller.rb

def index
  @articles = Article.all
end

記事/index.html.erb

<% @articles.each do |article| %>
  comments in article <%= article.comments.count %>
<% end %>

ネストされたルート (記事内のコメント) は、コメントのルートの作成/破棄に関してより重要です。accepts_nested_attributes_for :commentsまた、Article モデルを必ず追加してください。これにより、次のようなことができるようになります。

たとえば、articles_controller.rb で

def show
  @article = Article.find(params[:id])

  # creates a new comment object with atricle_id already initialized
  @comment = @article.comments.build
end

編集

パフォーマンスを気にし始めるなら、キットーのコメントに同意します.

この移行を追加します。

class AddCommentsCountToArtices < ActiveRecord::Migration
  def change
    add_column :articles, :comments_count, :integer, null: false, default: 0
  end
end

Comment モデルの関係宣言を次のように変更します。

belongs_to :article, counter_cache: true

次に、このような呼び出しを行っarticle.comments_countて、の代わりにカウントを取得できますatricle.comments.count。また、カウントが 0 の場合は、クエリを作成することさえできないため、すばらしいことです (Rails 3 Way の p. 195)。

counter_cache の仕組みに興味がある場合: コメントが作成または破棄されるたびに、親記事の comments_counter 属性を更新するコールバックを所属するクラス (この場合は Comment クラス) に追加します。

また、 Obie Fernandezがここで説明しているように、counter_cache 機能を既存のデータベースに簡単に追加できます。

于 2012-08-29T17:14:28.337 に答える
1
@article.comments 

@article のすべてのコメントが表示されます。以下のように指定する必要はありません

@article.comments.find(:all)

すべての記事のコメント数を表示するには、次のようにします。

%table
  %thead
  %tbody
    - @articles.each do |article|
      %tr
      = article.comments.count

ビューはhamlにあります

于 2012-08-29T17:19:59.620 に答える