循环数组以在Ruby on Rails中收集

时间:2013-09-01 18:27:32

标签: ruby-on-rails ruby

使用Rails 3.2。我有以下内容:

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

我在fruit中返回.collect(&:fruit)时遇到问题。我应该改变什么?感谢。

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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