2016-11-10 127 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解决了该问题。

谢谢大家的努力帮助!