2016-11-10 129 views
1

我正在學習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}

+1

根據錯誤,你在一個數組上調用'.id'。找出發生的原因。 –

+0

我沒有看到代碼的明顯錯誤。無論是在其他代碼的地方,或在數據,或env問題(你改變了磁盤上的代碼,但你的服務器仍然運行舊的buggy版本,類似的東西) –

+0

錯誤是,在某些情況下,你的'row_array'是空了,你正在期待一個散列。所以當你調用'.id'時你有上面的錯誤。爲防止錯誤,你可以添加檢查像'除非row_array.blank?' –

回答

0

好的,所以問題是一個錯誤的SQL查詢返回錯誤的值,因此其中一些沒有.id方法。更正了SQl查詢並嘗試通過ActiveRecord :: Relation [「id」]訪問該id解決了該問題。

謝謝大家的努力幫助!