2012-10-13 5 views
6

Czy istnieje prosty sposób, aby powiedzieć: w przeciwnym razie, jeśli nie było nic zapętlonego, pokaż "Brak obiektów". Wygląda na to, że powinien być miły składniowej sposób to zrobić, zamiast obliczać długość @ user.find_object („parametr”)W Ruby on Rails każdej pętli, czy istnieje dobry sposób, aby coś zrobić, jeśli nic nie było iterowane?

+0

Najlepszym sposobem znalazłem (i lubi) jest odpowiedź od @ fernando-Allen: http://stackoverflow.com/a/2977478/757850 –

Odpowiedz

6

można zrobić coś takiego:

if @collection.blank? 
    # @collection was empty 
else 
    @collection.each do |object| 
    # Your iteration logic 
    end 
end 
+3

Jest to normalny, choć bardzo szczegółowy sposób na zrobienie tego. Zauważ, że 'puste?' Może cienieć niektóre problemy (wartość nie powinna być 'nil'),' puste? 'Jest bardziej szczegółowe. – tokland

0
if @array.present? 
    @array.each do |content| 
    #logic 
    end 
else 
    #your message here 
end 
5

Szyny zobaczyć

# index.html.erb 
<h1>Products</h1> 
<%= render(@products) || content_tag(:p, 'There are no products available.') %> 

# Equivalent to `render :partial => "product", @collection => @products 

render(@products) powróci nil gdy @products jest pusty.

Ruby

puts "no objects" if @collection.blank? 

@collection.each do |item| 
    # do something 
end 

# You *could* wrap this up in a method if you *really* wanted to: 

def each_else(list, message) 
    puts message if list.empty? 

    list.each { |i| yield i } 
end 

a = [1, 2, 3] 

each_else(a, "no objects") do |item| 
    puts item 
end 

1 
2 
3 
=> [1, 2, 3] 

each_else([], "no objects") do |item| 
    puts item 
end 

no objects 
=> [] 
0

I wykonaj następujące czynności:

<% unless @collection.empty? %> 
<% @collection.each do |object| %> 
    # Your iteration logic 
    <% end %> 
<% end %>