2

ストーリーと投票の2つのモデルがあります。ユーザーが投票できる記事のリストがあり、投票モデルに個別の投票として保存されています。

ストーリーモデルには多くの投票があり、story_idは投票レコードとともに保存されます。

ストーリービューでのインデックスアクションの現時点では、特定のストーリーの投票数を確認するために単純なカウントを実行しようとしています。これは、次のコードで実現しています。

<%= @total_votes = Vote.where(:story_id => story.id).count %>

ただし、これをストーリーインデックスアクションビューから削除したいのですが、保存するかどうかわかりませんか?これを行うためのより効率的な方法はありますか?

4

4 に答える 4

3

関係は物語が多くの票を持っているようです。だから、あなたは簡単に行うことができます:

<%= story.votes.count %>

データベースのパフォーマンスが心配な場合は、カウンターキャッシュを追加することをお勧めします。

于 2013-03-21T13:04:59.040 に答える
0

モデル内でメソッドを定義し、それをコントローラーで使用できます。

def total_votes(sid)
  where(:story_id => sid ).count
end

次に、コントローラーで:

@total_votes = Vote.total_votes(story_id)
于 2013-03-21T12:58:19.290 に答える
0

総投票数を保存したいとおっしゃいました。

$~ rails g migration add_total_votes_to_stories total_votes:integer

class Story
  after_save, :update_total_votes

  private

  def update_total_votes
    write_attribute :total_votes, votes.count
  end
于 2013-03-21T13:04:34.583 に答える
-2

これはコントローラーに入れる必要があります

def index
  @total_votes = Vote.where(:story_id => story.id).count
end
于 2013-03-21T12:51:39.813 に答える