2010-10-31 13 views
23

Yapmaya çalıştığım şeyin oldukça basit olduğunu düşünüyorum ve bunun neden çalışmadığından emin değilim. Rails kullanıyorum 3.Ruby/Rails - .each Iterator, döngünün sonundaki tüm diziyi yazdırıyor

Temel olarak, yalnızca varolan bir modeldeki bir sütundan farklı değerleri seçmeye çalışıyorum ve hepsini yazdırın. Çoğunlukla, bu çalışır, ancak benim görüşümdeki .each döngüsü de, döngü sonunda tüm diziyi yazdırmayı bitirir. (

Turistik adında bir modeli ve her cazibe) şu anda Kategori basitlik için DB kodlanma Bir Kategori (vardır ben.

Bu Gözde mekan Modeli ve bir sınıf yöntemi tanımlanan "all_categories" dir .. . hiçbir roket bilimi, ju -

class Attraction < ActiveRecord::Base 

    def self.all_categories 
    Attraction.select("DISTINCT category") 
    end 

end 

Bu

Bu sorun neden oluyor Bence kodudur Gözde mekan Kontrolör

class AttractionsController < ApplicationController 
    def index 
    @categories = Attraction.all_categories 
    @attractions = Attraction.find(:all) 
    end 

    def show 
    @attraction = Attraction.find(params[:id]) 
    end 
end 

olduğunu st basit bir yineleyici, ...

<%= @categories.each do |c| %> 
    <%= c.category %><br/> 
    <% end %> 

Oldukça basit, değil mi? Bu, tüm çalışan gayet ANCAK bu bu kod segmenti çalıştırıldığında gördüklerimi geçerli:

Architecture 
Art 
Fashion 
Music 
[#<Attraction category: "Architecture">, #<Attraction category: "Art">, #<Attraction category: "Fashion">, #<Attraction category: "Music">] 

Neden sonunda dizisi yazdırılır? Tek istediğim kategorilerin bir listesi:

Architecture 
Art 
Fashion 
Music 

Açıkçası, Ruby/Rails yeniyim, ve bu konuya bir çözüm baştan aramak için çalıştık. Eksik olduğum belli bir şey var mı?

Herhangi bir yardımı için teşekkür ederiz.

cevap

64
# Change this line with an =: 
<%= @categories.each do |c| %> 
# ...to this: 
<% @categories.each do |c| %> 

Yalnızca #each yöntemin blokta yan etkileri, döndürülen değerin interpolasyon istemiyoruz istiyorum. Eğer

def self.all_categories 
    Attraction.select("DISTINCT category") 
end 

yapınca senin alana göre tanımlamak özelliği olan bir cazibe Nesnesi oluşturmak olduğunu ne olur, çünkü

+0

tam olarak aynı satırı yapabilir misiniz? – shingara

+4

'<% =' vs '<%' ... – DigitalRoss

+0

Çok teşekkür ederim! – tarunsachdeva

1

öyle.

def self.all_categories 
    Attraction.select("DISTINCT category").map(&:category) 
end 
+0

Bu da çalışıyor, her ne kadar sonda dizi baskısından kaçınmak için DigitalRoss tarafından önerilen çözümü uygulamak zorundayım. Teşekkürler! – tarunsachdeva