我正在学习Ruby on Rails并且正在研究redmine和一些redmine插件。
<% 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 :: Template :: Error([]:Array的未定义方法`id':”
rows是Tracker类的ActiveRelation,定义为
class Tracker < ActiveRecord::Base
我从这里理解的是我应该以某种方式访问行对象的属性,并且我可以将它们打印到控制台但是无论我做什么我仍然会得到相同的错误。
我尝试的东西或多或少:row.attributes [:id],row.attributes [“id”],row.id。所有这些都打印出正确的变量,但是当我想在field_name => row_array[0].id
PS:不要担心打开标签,我没有粘贴所有标签,据我所知,没有任何错误。
提前致谢!
编辑:当我调试它时,行对象的结构如下:
行(跟踪器类) - &gt; @attributes(ActiveRecord:AttributeSet) - &gt; @attributes(LazyHashSet) - &gt; @values(Hash) - &gt;标识。
编辑2:puts row_array [0] .methods打印这些:
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] .attributes输出:
{“id”=&gt; 1,“name”=&gt;“Hata”,“is_in_chlog”=&gt; true,“position”=&gt; 1,“is_in_roadmap”=&gt; false,“fields_bits”= &gt; 0,“default_status_id”=&gt; 1}
答案 0 :(得分:0)
好吧所以问题是错误的SQL查询返回错误的值,因此其中一些没有.id方法。更正了SQl查询,并试图通过ActiveRecord :: Relation [“id”]访问id来解决问题。
感谢所有试图提供帮助的人!