ruby-on-rails - ActionView::Template::Error: nil:NilClass 的未定义方法 `<'
问题描述
在显示(html)页面中我有这个
<% if @movie.views_count > 150 && @movie.ratings_chart_last_days(30) < 4 %>
You are in the first 3 positions
<% end %>
在 movie.rb 我有这个
def ratings_chart_last_days(number_of_days)
subset = Movie.where('movies.created_at >= ?', number_of_days.days.ago)
@ratings_chart_last_days ||= chart_position(:ratings_abs, subset)
end
但我有这份报告:
nil:NilClass 的未定义方法“<”
rating_chart_last_days 方法返回 nil。然后,当它尝试进行 < 比较时,它会尝试执行 < 方法。NilClass 不支持该方法。
怎么解决?!
已编辑
图表位置代码
module Chartable
def chart_position(attribute, start_query = nil)
attribute = self.class.connection.quote_column_name(attribute.to_s)
partition = partition_by(start_query || self.class.all, attribute)
self.class.from(partition, :s).select('s.id, s.position')
.find_by('s.id = ?', id).try(:position)
end
private
def partition_by(chain, attribute)
chain
.select('id, ROW_NUMBER() OVER ('\
"ORDER BY #{attribute} DESC, created_at DESC"\
') as position')
end
end
解决方案
我不确定你的意图是什么,但如果你只看过去 30 天内创作的电影而你没有,我怀疑chart_position
方法可能会返回nil
?
您可以强制将其视为前三名,也可以强制将其视为未排名,您的选择。要将其包含在顶部位置,请返回,0
否则返回Float::INFINITY
def ratings_chart_last_days(number_of_days)
@ratings_chart_last_days ||= {}
return @ratings_chart_last_days[number_of_days] if @ratings_chart_last_days[number_of_days].present?
subset = Movie.where('movies.created_at >= ?', number_of_days.days.ago)
@ratings_chart_last_days[number_of_days] ||= chart_position(:ratings_abs, subset) || Float::INFINITY
end
我还更改了您的记忆...@ratings_chart_last_days
无论number_of_days
参数如何,您总是返回,所以我建议它@ratings_chart_last_days
应该是所有先前计算结果的哈希,索引为number_of_days
推荐阅读
- reactjs - ASP.NET Core 项目 React 中的 ES6 模板文字(模板字符串)
- c# - 将类型传递给c#中的函数
- aws-lambda - 在 Lambda 上运行时,Winston CloudWatch 传输未创建日志
- c# - com(ocx)如何使用c#运行时加载
- scripting - EB 指南(com. ed 6.8)脚本引擎报告“预期 'Function () void' 但得到 '错误'
- spring-boot - 如何使用 Gradle + Spring boot 运行多个配置文件?
- python - 为什么使用 __new__ 时无法访问类变量?
- javascript - 正则表达式将特定模式与数字匹配。允许的数字 0 和大于 5
- android - 发布失败(69);尝试在 https://pub.dartlang.org 中查找 cupertino_icons 的套接字错误
- flutter - ValueListenableBuilder:监听多个值