2013-09-01 110 views
-2

使用Rails 3.2。我有以下幾點:循環訪問Ruby on Rails數組

FRUITS = %w(
    apple 
    orange 
) 

FRUITS.each do |fruit| 
    define_method "#{fruit}" do 
    stalls.collect(&:fruit).join(' ') 
    end 
end 

預期的結果是:

def apple 
    stalls.collect(&:apple).join(' ') 
end 

def orange 
    stalls.collect(&:orange).join(' ') 
end 

我得回在.collect(&:fruit)fruit一個問題。我應該改變什麼?謝謝。

+1

問題是什麼? –

+1

什麼是攤位? – oldergod

+1

-1 for not posting [SSCCE](http://sscce.org/) –

回答

3

使用完整的塊的形式(而不是#to_proc快捷方式)

FRUITS.each do |fruit| 
    define_method "#{fruit}" do 
    stalls.collect{|st| st.send(fruit.to_sym)}.join(' ') 
    end 
end 
+0

這段代碼在做什麼,我瞭解的是,方法是在'each'方法內動態創建的,然後從'collect'內部創建,方法,哪個方法被調用? :( –

+0

動態數據轉換器,據我所知 –

+0

塞爾吉奧,我認爲你需要添加.to_sym到水果,你需要發送':apple'而不是字符串'apple'。stalls.collect {| st | st.send(fruit.to_sym)}。join('')' –

1

您正在使用的符號:fruit在你的電話,收集,所以生成的方法將是這樣的:

def orange 
    stalls.collect(&:fruit).join(' ') 
end 

您需要從fruit字符串(使用String#to_sym)創建符號,如下所示:

FRUITS.each do |fruit| 
    define_method "#{fruit}" do 
    stalls.collect(&fruit.to_sym).join(' ') 
    end 
end 
+0

這應該是被接受的答案。 –