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 解决了问题。

感谢所有试图提供帮助的人!