Один хороший способ, особенно если у вас может быть более 0..9 пользовательских полей, это использовать method_missing
:
class Info
USER_FIELD_METHOD = /^user_field_(\n+)$/
def method_missing(method, *arg)
return super unless method =~ USER_FIELD_METHOD
i = Regexp.last_match[1].to_i
get_user_fields && @user_fields[i]
end
# Useful in 1.9.2, or with backports gem:
def respond_to_missing?(method, private)
super || method =~ USER_FIELD_METHOD
end
end
Если вы предпочитаете определять методы:
10.times do |i|
Info.class_eval do
define_method :"user_field_#{i}" do
get_user_fields && @user_fields[i]
end
end
end