我为客户创建了一个问题,就像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
答案 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
对象只是为了计算它们听起来像是对我的资源的可怕浪费。