One good way, especially if you can have more than 0..9 custom fields, would be to use 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
If you prefer to define methods:
10.times do |i| Info.class_eval do define_method :"user_field_#{i}" do get_user_fields && @user_fields[i] end end end
source share