articles_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
을 추가해야합니다. 이것은 당신이 이런 식으로 물건을 할 수 있습니다 : 예를 들어
, 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
편집
, 나는 Kitto의 의견에 동의합니다.
이 마이그레이션 추가
class AddCommentsCountToArtices < ActiveRecord::Migration
def change
add_column :articles, :comments_count, :integer, null: false, default: 0
end
end
을 그리고 여기에 귀하의 코멘트 모델에 관계 선언을 변경
belongs_to :article, counter_cache: true
은 다음 당신은
atricle.comments.count
대신 수를 얻기 위해이
article.comments_count
같은 통화를 할 수 있습니다. 그리고 카운트가 0이라면 쿼리 (심지어 레일즈 3 웨이 195 쪽)조차 만들지 않기 때문에 위대한 것입니다.
counter_cache의 작동 방식에 대해 궁금한 경우 : 주석을 만들거나 삭제할 때마다 상위 기사의 comments_counter 속성을 업데이트하는 소속 클래스 (이 경우에는 Comment 클래스)에 콜백을 추가합니다.
또한 counter_cache 기능은 Obie Fernandez가 기존 데이터베이스에 쉽게 demonstrated here으로 추가 할 수 있습니다.
내가 강하게위한 카운터 캐시를 사용하는 것이 좋습니다 것 HAML에 할 모든 기사에 대한 댓글의 수를 표시하기 위해 다음과 같이
을 지정
를 필요 없어요 이것은 SQL 측면에 많은 부담을 줄 수 있기 때문입니다. RailsCast에서이 에피소드를보고 어떻게 끝 났는지보십시오. http://railscasts.com/episodes/23-counter-cache-column – Kitto
Kitto의 의견은 답변으로 게시해야하며 올바른 대답으로 받아 들여야합니다. –