我使用acts_as_votable
gem:https://github.com/ryanto/acts_as_votable
有三种可投票的模型
这些模型中的每一个都属于用户。
用户业力将是他们在所有评论,书籍和电影上收到的总票数,乘以2加上得分调整值。
现在我正在尝试这个评论:
<%= "#{((current_user.comments.map{|c| c.votes.count}.inject(:+))*2) + current_user.score_prop}" %>
我收到了这个错误:
undefined method `*' for nil:NilClass
我在发生错误后继续遇到错误。根据评论,书籍和电影计算总分的最佳方法是什么?我应该从我的控制器而不是我的视图中执行此操作吗? (我在视图中有它的原因是因为我在页脚布局中有这个。
答案 0 :(得分:2)
<%= "#{((current_user.comments.map{|c| c.votes.count}.inject(:+))*2) + current_user.score_prop}" %>
首先,<%=
已经调用to_s
- 您不需要将计算放在字符串中:"#{}"
<%= ((current_user.comments.map{|c| c.votes.count}.inject(:+))*2) + current_user.score_prop %>
其次,sum
存在并且比inject
更容易理解,因此最好在可能的地方使用它:
<%= ((current_user.comments.map{|c| c.votes.count}.sum)*2) + current_user.score_prop %>
最后,让我们去除部分。这让我们看到你的长计算的哪个部分是破坏的 试试这个,看看现在是否有任何一行断开:
<% comment_vote_count = current_user.comments.map{|c| c.votes.count}.sum
# I've added this as my best guess for what will fix your problem
comment_vote_count ||=0
comment_vote_count *= 2
total_vote_count = comment_vote_count + current_user.score_prop %>
<%= total_vote_count %>
现在,一旦你完成所有工作 - 你可以将代码重新放回一行 - 当出现问题并且无法弄清楚哪个位出现故障时,将这些东西拆分出来是件好事。