使用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)
时遇到问题。我应该改变什么?感谢。
答案 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