I want to create large number of attributes which can be done with ease if constructed with method call like this,
attr_accessor :attr_list
def attr_list
[:x1, :y1, :x2, :y2]
end
This is not working. Is there any other way to achieve this?
Any help will be appreciated.
Figured it out,
def self.attr_list
[:x1, :y1, :x2, :y2]
end
attr_accessor *attr_list
Explanation:
As attr_accessor is a method call which expects parameters list. So we can not pass array as it is. (*) will convert array into parameters list.
Just need to define a class method returning array of attribute list passed to attr_accessor.
Works well with attr_accessible(or anything similar) as well.
One way to do this without incurring a warning:
class MyClass
ATTR_LIST = [:x1, :y1, :x2, :y2]
attr_accessor(*ATTR_LIST)
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With