试图通过多个关联获得计数

时间:2010-12-20 16:15:05

标签: ruby-on-rails ruby count associations

我为客户创建了一个问题,就像StackOverflow一样。我不是试图实现某种点系统(如SO声誉)。我试图通过关联获得某些记录计数(我认为这些关联设置正确)。主要是我试图得到用户答案的​​投票数。这是一个例子。

/views/questions/show页面中,我通过调用部分_answer.html.erb列出该问题的所有答案。通过每个答案,我只需执行answer.user.username即可获取answer.user信息(用户名,电子邮件等)。我希望以格式显示某些总点计算。因此,如果User A回答Question A,则在User A的答案旁边,我想显示所有User A的答案投票总数。

通过执行以下操作,我可以在/views/answers/_answer.html.erb中成功获取用户答案的​​计数:

<%= answer.user.answers.count %>

但是当我尝试扩展该语法/关联以获得所有User A的答案的计票数时,我得到了未定义的方法错误。

<%= answer.user.answers.votes.count %> 

我的设置在这里根本不对,还是我错过了什么。

这有点令人困惑,所以如果你需要更多细节,请告诉我。

更新:

以下是关联:

答案

class Answer < ActivRecord::Base
  belongs_to :question
  belongs_to :user
  has_many :votes, :dependent => :destroy
end

投票

class Vote < ActiveRecord::Base
  belongs_to :answer
  belongs_to :user
  belongs_to :question
end

用户

class User < ActiveRecord::Base  
  has_many :questions, :dependent => :destroy
  has_many :answers, :dependent => :destroy
  has_many :votes, :through => :answers , :dependent => :destroy
end

2 个答案:

答案 0 :(得分:3)

<%= answer.user.answers.votes.count %> 

但是

answer.user.answers

是一系列答案,所以我想你想要像

这样的东西
<%= answer.user.answers[id].votes.count %> 

<强>更新

<% answer.user.answers.each do |answer| %>
    <%= answer.votes.count%>
<% end% >

<强>更新

 <%= (answer.user.answers.map{|x| x.votes.count}).sum%>

我爱这些东西

答案 1 :(得分:1)

但是当我尝试扩展该语法/关联以获得所有用户A的答案的计票数时,我得到未定义的方法错误。
您可以找到使用user.answers集合in here可以执行的操作的完整列表(除标准数组/可枚举方法外)。它只是集合实例,而不是Answer对象,因此您无法从Answer模型上调用方法。

您可以尝试设置has_many :votes, :through => :answers关系。 (See here for details)虽然,我不确定:through是否适用于这种情况 或者,您可以在User模型中创建一个方法来返回所有Vote个对象(只需迭代所有答案)

但是坦率地说,创造一大堆Vote对象只是为了计算它们听起来像是对我的资源的可怕浪费。