1

问题:

如果返回结果单个结果每个方法都失败 - 如何改进代码?

案子:

控制器动作:

@results= Person.find_by_name('Ben');

看法:

<% if nil!=@results %>
    <% @results.each do |r| %>
       <h2>courses:</h2> <a href="/course/<%= r.name %>/"><%= r.name %></a>
    <% end %>
<% else %>
       <h2>no results</h2>
<% end %>

结果:

undefined method `each' for #<Person id: 2, name: "Ben">

谢谢

4

2 回答 2

2

一个常见的习语是使用Array()

@results = Array(Person.find_by_name('Ben'))

Array()总是会返回一些可枚举的东西,即使它是 nil。

然后你可以保持你的代码的其余部分相同。但我建议使用 rails helper 清理一下present?

<% if @results.present? %>
   ....
<% else %>
   <h2>no results</h2>
<% end %>
于 2012-08-19T18:47:09.597 回答
0

在循环之前检查它的类型:

if !@results.is_a?(Person) && !@results.blank?
  # loop through them all as you are doing...
elsif !@results.blank? #still avoiding the possible nil error here
  # print out for a single record
else
  # there are no results
end

您总是希望确保它不是空白(nil 或空),但第一次检查确保您没有人员对象,如果它不是空白,则意味着 ActiveRecord 为您返回了人员对象数组。

于 2012-08-19T18:14:25.540 回答