Ruby 未定义的方法错误
Ruby undefined method error
我正在 Ruby 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 (undefined method `id' for []:Array):"
rows 是 Tracker class 的 ActiveRelation,定义为
class Tracker < ActiveRecord::Base
我从这里了解到我应该以某种方式访问行对象的属性,我确实可以将它们打印到控制台,但无论我做什么我仍然会遇到同样的错误。
我尝试的东西或多或少是:row.attributes[:id]、row.attributes["id"]、row.id。所有这些都打印出正确的变量,但是当我想在这里访问它们时会抛出错误 field_name => row_array[0].id
PS : 不用担心打开的标签,我没有全部粘贴,据我所知没有错误。
提前致谢!
编辑:当我调试它时,行对象具有如下结构:
row(Tracker class) -> @attributes(ActiveRecord:AttributeSet) -> @attributes(LazyHashSet) -> @values(Hash) -> 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].attributes 输出:
{"id"=>1, "name"=>"Hata", "is_in_chlog"=>true, "position"=>1, "is_in_roadmap"=>false, "fields_bits"=>0, "default_status_id"=>1}
好的,所以问题是错误的 SQL 查询返回了错误的值,因此其中一些没有 .id 方法。更正了 SQl 查询并尝试通过 ActiveRecord::Relation["id"] 访问 ID 解决了问题。
感谢所有试图提供帮助的人!
我正在 Ruby 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 (undefined method `id' for []:Array):"
rows 是 Tracker class 的 ActiveRelation,定义为
class Tracker < ActiveRecord::Base
我从这里了解到我应该以某种方式访问行对象的属性,我确实可以将它们打印到控制台,但无论我做什么我仍然会遇到同样的错误。
我尝试的东西或多或少是:row.attributes[:id]、row.attributes["id"]、row.id。所有这些都打印出正确的变量,但是当我想在这里访问它们时会抛出错误 field_name => row_array[0].id
PS : 不用担心打开的标签,我没有全部粘贴,据我所知没有错误。
提前致谢!
编辑:当我调试它时,行对象具有如下结构:
row(Tracker class) -> @attributes(ActiveRecord:AttributeSet) -> @attributes(LazyHashSet) -> @values(Hash) -> 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].attributes 输出:
{"id"=>1, "name"=>"Hata", "is_in_chlog"=>true, "position"=>1, "is_in_roadmap"=>false, "fields_bits"=>0, "default_status_id"=>1}
好的,所以问题是错误的 SQL 查询返回了错误的值,因此其中一些没有 .id 方法。更正了 SQl 查询并尝试通过 ActiveRecord::Relation["id"] 访问 ID 解决了问题。
感谢所有试图提供帮助的人!