我正在學習Ruby on Rails,目前正在研究redmine和一些redmine插件。Ruby未定義方法錯誤
<% for row in rows %>
<%row_array = rows.to_a%>
<tr class="<%= cycle("odd", "even") %>">
<td class="name"><%= link_to h(row), aggregate_path(@project, field_name, row) %></td>
<td>
<%
aggregate_link data, { field_name => row_array[0].id, "closed" => 0 },
aggregate_path(@project, field_name, row,
:op => {"status_id"=>"o", "#{filter_by}"=>"><"},
"v[#{filter_by}]" => formated_dates(@dates),
"f" => ["status_id", "#{filter_by}", ""])
%>
出於某種原因,這個代碼拋出
「::的ActionView模板::錯誤(未定義的方法`ID」爲[]:陣列):」
行是定義爲跟蹤器類的ActiveRelation,定義爲
class Tracker < ActiveRecord::Base
我從這裏可以理解的是我應該訪問無論如何,我都可以將它們打印到控制檯上,但無論我做什麼,我仍然會得到相同的錯誤。
事情我想或多或少:row.attributes [:id],row.attributes [「id」],row.id。所有這些打印正確的變量,但是當我想在這裏訪問它們時拋出一個錯誤field_name => row_array[0].id
PS:不要擔心打開的標籤,我沒有粘貼所有它,到目前爲止沒有錯誤我所知。
在此先感謝!
編輯:當我調試它的行對象具有這樣的結構:
行(跟蹤類) - > @屬性(ActiveRecord的:AttributeSet中) - > @屬性(LazyHashSet) - > @values(哈希) - > id。
編輯2:看跌row_array [0]。方法打印這些:
ID
ID =
id_before_type_cast
id_came_from_user?
id?
id_changed?
id_change
id_will_change!
id_was
reset_id!
restore_id!
所以我相信我的方法調用是正確的。
編輯3:row_array [0]。屬性輸出該:
{ 「ID」=> 1, 「姓名」=> 「畑」, 「is_in_chlog」=>爲真, 「位置」=> 1 「is_in_roadmap」=>假「fields_bits 「=> 0,」default_status_id「=> 1}
根據錯誤,你在一個數組上調用'.id'。找出發生的原因。 –
我沒有看到代碼的明顯錯誤。無論是在其他代碼的地方,或在數據,或env問題(你改變了磁盤上的代碼,但你的服務器仍然運行舊的buggy版本,類似的東西) –
錯誤是,在某些情況下,你的'row_array'是空了,你正在期待一個散列。所以當你調用'.id'時你有上面的錯誤。爲防止錯誤,你可以添加檢查像'除非row_array.blank?' –