Rails将记录计数内部视图关联起来

时间:2013-03-21 12:49:10

标签: ruby-on-rails ruby activerecord

我有两个模特,故事&投票。我有一个用户可以投票的文章列表,它在投票模型中作为单独的投票存储。

故事模型有很多票,故事_id与投票记录一起存储。

在我对故事视图的索引操作中,我只是想做一个简单的计数,看看给定故事有多少票,我用以下代码实现了这一点。

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

但是我想从我的故事索引操作视图中删除它但不确定是否存储它?有没有更有效的方法呢?

4 个答案:

答案 0 :(得分:3)

似乎关系是故事有很多票。所以,您可以这样做:

<%= story.votes.count %>

如果您担心数据库性能,可能需要添加counter cache

答案 1 :(得分:0)

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

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

然后在控制器中:

@total_votes = Vote.total_votes(story_id)

答案 2 :(得分: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

答案 3 :(得分:-2)

这应该进入控制器

def index
  @total_votes = Vote.where(:story_id => story.id).count
end