0

我有一个 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

世界上到底发生了什么?为什么具有不同名称的相同方法有效而其他方法无效?为什么是那两个?为什么它们在控制器中而不是在视图中工作?

4

1 回答 1

1

您的视图调用@today.top_agents_snown,但您定义了top_agents_shown。只是拼写错误。有些日子就是这样!

于 2012-08-02T01:57:09.877 回答