Ruby on Rails 一条记录时每次迭代出错

Ruby on Rails each iteration error when one record

我坚持似乎应该有一个非常简单的解决方案,但我找不到任何可行的方法!我正在迭代索引页上 table 的结果(returns 状态列表)。当返回多条记录时,这没有任何问题。但是,当返回单个记录时,出现错误:undefined method 'each' for #

我知道当只返回一条记录时会导致错误,但我找不到任何关于如何处理这个问题的文档,尤其是在可能返回 1 条或 0 条记录的情况下。

控制器中的代码:

@states = State.find(params[:id])

索引页中的代码:

<ul>
  <% @states.each do |state| %>
    <li>
      <%= state.state_name %>
    </li>
  <% end %>
</ul>

因为你使用的是find,当你在参数中发送多个id时,会匹配到多个记录;当您发送单个 ID 时,将返回单个实例。

为确保每次都能获得可以调用 eachActiveRecord::Relation 对象,请将控制器代码更改为以下内容:

@states = State.where(id: params[:id]) # index action

您提到它是 index 视图,因此上述更改应该可以解决您的问题。

如果是 show 视图,那么您需要坚持使用 find 并将视图更改为仅显示一个 state.

您需要检查它是否响应 .each,这是用于了解某些东西是否实现了 enumerable 模块的素数。

if @states.respond_to?(:each)
  # iteration goes here
else
  # single handling goes here

当然,您也可以在查询中使用 .where 选项,returns 始终是一个集合

@states = State.where(id: params[:id])

场景一:-

当在控制器中查询记录时:

@states = State.find(params[:id])

那么在视图中应该是这样的:

<p><%= @states.state_name %></p>

场景二:-

当在控制器中查询记录时:

@states = State.all

那么在视图中应该是这样的:

<ul>
  <% @states.each do |state| %>
    <li>
      <%= state.state_name %>
    </li>
  <% end %>
</ul>

注意:-在第一种情况下它只是一个对象,但在第二种情况下它是对象集合或对象数组。并且只有数组被迭代。