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 时,将返回单个实例。
为确保每次都能获得可以调用 each
的 ActiveRecord::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>
注意:-在第一种情况下它只是一个对象,但在第二种情况下它是对象集合或对象数组。并且只有数组被迭代。
我坚持似乎应该有一个非常简单的解决方案,但我找不到任何可行的方法!我正在迭代索引页上 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 时,将返回单个实例。
为确保每次都能获得可以调用 each
的 ActiveRecord::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>
注意:-在第一种情况下它只是一个对象,但在第二种情况下它是对象集合或对象数组。并且只有数组被迭代。