我有一个 Day 对象,其中包含一些统计信息并且每天更新。这是我得到的两个错误:
未定义的方法 `top_light_snown' 用于#
# 未定义的方法 `top_agents_snown'
根据视图的内容:
<h3 class='thin underline'>Daily Breakdown:</h3>
<%# debug @today %>
<%# @today.methods %>
Top User Agents Today: <%= @today.top_agents_snown %>
<br>
Top Keyword Triggers <%= @today.top_keyword_triggers %>
<br>
Top URLs Visited <%= @today.top_urls_visited %>
<br>
Top Injections Shown <%= @today.top_inj_shown %>
<br>
Top Popups Shown <%= @today.top_pop_shown %>
<br>
Top Custom Injections Shown <%= @today.top_cust_shown %>
<br>
Top Lightboxes Shown <%# @today.top_light_snown %>
<br>
Top Global Injections Shown <%= @today.top_glob_shown %>
请注意,只有 .top_light_shown 和 .top_agents_shown 会导致错误。所有其他方法都可以正常工作。还要注意两个注释掉的调试命令。调试@today 的结果表明它确实有一个属性“top_light_shown”,它也出现在@today.methods 的方法列表中,以及所有其他使用的方法。
这是控制器的内容 - 如您所见,我正在设置新的 @today Day 对象并用垃圾数据预先填充它,以查看是否可以从视图中访问它。在这种情况下,if 语句总是会失败(但即使没有,我也会遇到同样的未定义方法错误)
if Day.find_by_id(Time.now.day)
stats_today = Day.find_by_id(Time.now.day)
@ads_today = stats_today.top_inj_shown.size + stats_today.top_pop_shown.size + stats_today.top_cust_shown.size + stats_today.top_light_shown.size + stats_today.top_glob_shown.size
@total_pageviews = Day.find_by_id(Time.now.day).pageviews
@today = Day.find_by_id(Time.now.day)
else
@today = Day.new(:top_agents_shown => ['Firefox', 'Chrome'], :top_light_shown => ['l-TEST', 'l-TEST2'])
puts @today.top_light_shown
puts @today.top_agents_shown
@ads_today = 'ERROR'
@total_pageviews = 'ERROR'
end
这是请求页面后的服务器日志,其中 puts 在控制器中运行良好:
在 2012-08-01 19:13:03 -0600 开始获取 127.0.0.1 的“/assets/favicons/favicon.ico” 服务资产 /favicons/favicon.ico - 304 未修改(1 毫秒)
l-TEST l-TEST2 火狐浏览器
在 2012-08-01 19:16:38 -0600 开始 GET "/dashboard" for 127.0.0.1 由 DashboardController#index 作为 HTML 处理
最后,这是 Day.rb 的内容:
class Day
include MongoMapper::Document
key :number, Integer
key :pageviews, Integer
key :shown_injs, Integer
key :shown_pops, Integer
key :shown_custs, Integer
key :shown_lights, Integer
key :shown_globs, Integer
key :top_agents_shown, Array
key :top_keyword_triggers, Array
key :top_urls_visited, Array
key :top_inj_shown, Array
key :top_pop_shown, Array
key :top_cust_shown, Array
key :top_light_shown, Array
key :top_glob_shown, Array
end
世界上到底发生了什么?为什么具有不同名称的相同方法有效而其他方法无效?为什么是那两个?为什么它们在控制器中而不是在视图中工作?