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()たとえそれがゼロであっても、常に列挙可能なものを返します。

次に、残りのコードを同じに保つことができます。しかし、レールヘルパーを使用して少しクリーンアップすることをお勧めします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 に答える