いくつかの統計を含み、毎日更新される Day オブジェクトがあります。ここに私が得ている2つのエラーがあります:
未定義のメソッド「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 のみがエラーを引き起こすことに注意してください。他のすべての方法は完全に正常に機能します。また、コメントアウトされた 2 つの debug コマンドにも注意してください。debug @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 の GET "/assets/favicons/favicon.ico" を開始 アセット /favicons/favicon.ico を提供 - 304 変更なし (1ms)
l-TEST l-TEST2 Firefox Chrome
127.0.0.1 の GET "/dashboard" を 2012-08-01 19:16:38 -0600 で開始 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
世界で何が起こっているのですか?異なる名前の IDENTICAL メソッドが機能し、他のメソッドが機能しないのはなぜですか? なぜそれらの特定の2つですか?ビューではなくコントローラーで機能するのはなぜですか?