2012-10-13 16 views
6

Có cách dễ dàng để nói: nếu không có gì lặp lại, hãy hiển thị 'Không có đối tượng'. Có vẻ như không nên có một cách cú pháp tốt đẹp để làm điều này chứ không phải là tính toán độ dài của @ user.find_object ("param")Trong một vòng lặp Ruby on Rails, có cách nào tốt để làm điều gì đó nếu không có gì được lặp lại không?

+0

Cách tốt nhất mà tôi tìm thấy (và yêu) là câu trả lời từ @ fernando-allen: http://stackoverflow.com/a/2977478/757850 –

Trả lời

6

Bạn có thể làm một cái gì đó như:

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

đây là cách bình thường mặc dù dài dòng để làm điều đó. Lưu ý rằng 'blank?' Có thể đổ bóng một số vấn đề (giá trị không nên là 'nil'),' empty? 'Là cụ thể hơn. – tokland

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

Rails xem

# 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) sẽ trở lại nil khi @products trống.

của 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

tôi làm như sau:

<% unless @collection.empty? %> 
<% @collection.each do |object| %> 
    # Your iteration logic 
    <% end %> 
<% end %> 
Các vấn đề liên quan