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

你说你想存储总票值:

$~ 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 回答
0

在模型内部,您可以定义一个方法并在控制器中使用它。

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

然后在控制器中:

@total_votes = Vote.total_votes(story_id)
于 2013-03-21T12:58:19.290 回答
-2

这应该进入控制器

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