我正在学习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?' –