【发布时间】:2014-03-31 18:11:53
【问题描述】:
我使用acts_as_votable gem:https://github.com/ryanto/acts_as_votable
共有三种投票模式
- 评论
- 书籍
- 电影
这些模型中的每一个都属于一个用户。
用户业力是他们在所有 cmets、书籍和电影中获得的总票数乘以 2 加上分数调整值。
现在我只用 cmets 试试这个:
<%= "#{((current_user.comments.map{|c| c.votes.count}.inject(:+))*2) + current_user.score_prop}" %>
我收到了这个错误:
undefined method `*' for nil:NilClass
我只是在这个错误之后不断地遇到错误。根据 cmets、书籍和电影计算总分的最佳方法是什么?我应该从我的控制器而不是我的视图中执行此操作吗? (我在视图中有它的原因是因为我在页脚布局中有它。
【问题讨论】:
-
我猜当当前用户没有 cmets 时这会爆炸?或者 cmets 没有投票 - 无论哪种方式都有一个 nil 并且你正在调用它的注入......这当然行不通。
-
顺便说一句 -
<%=已经调用了“to_s” - 你不需要将你的计算放在字符串中:"#{}" -
我正在使用字符串插值在输出的数字周围添加文本,是的,你的权利!当用户没有投票或cmets时,这件事就发疯了!!! :)
-
是的 - 在继续计算之前,您需要检查这种情况。看我的回答
-
公平的 re: string interpolaion - 虽然如果你在 Stack Overflow 问题中去掉那种东西会很有用 - 因为我们没有必要帮你解决你的问题 :)
标签: ruby-on-rails ruby ruby-on-rails-4