Undefined method 'a=' when initializing an object


#1

I have an array of strings that contains the values for attributes of
an object. I have another array that contains the list of attributes
(strings) for an object.

I am creating the class by:

obj = class_name.new

which gives me a valid object for the given object name.

I want to do something like:

obj.attribute1 = value1 and so on by looping through the arrays.

When I run eval(“obj.#{a} = #{value}”), I get the undefined method
‘a=’ error message. Please help. TIA.


#2

I have an array that contains list of attributes of a ActiveRecord
object. I have another array that contains list of values for those
attributes.

So for a Foo object,

attributes_list = [“first_name”, “last_name”]
values_list = [“Bugs”, “Bunny”]

I have instantiated the class by:

class_name = class_string.constantize
obj = class_name.new

Then I just loop up through those arrays and set values to the
attributes:

obj.attribute1 = value1

I get:

undefined method `attribute1=’ for #Foo:0x3326da8

How do I set values for the attributes? TIA.


#3

On 6/21/07, Bala P. removed_email_address@domain.invalid wrote:

When I run eval(“obj.#{a} = #{value}”), I get the undefined method
‘a=’ error message. Please help. TIA.

Please do not use eval() unless you have a good reason to! It’s very
dangerous if you’re not careful.

What you’re looking for is:

obj.send("#{a}=", value)

Still, you’re going to need to show more code for people to be able to
help you. Where is a being defined, what is obj?


#4

On 6/21/07, Bala P. removed_email_address@domain.invalid wrote:

How do I set values for the attributes? TIA.

Are you trying to set the values on an instance of Foo, or on a model
instance?

If it’s an instance of a class Foo, look at the documentation for
attr_accessor.


#5

Thanks Greg, your suggestion worked. Ruby community support rocks!


#6

On Jun 21, 10:05 am, “Bala P.” removed_email_address@domain.invalid wrote:

I have an array of strings that contains the values for attributes of
an object. I have another array that contains the list of attributes
(strings) for an object.

Is this what you’re looking for?

require
‘ostruct’
example_data =
{
‘ba’ =>
‘ilar’,
‘la’ =>
‘bamba’,
‘pa’ =>
‘thological’,
‘ranj’ =>
‘eofmotion(?)’,
}
obj =
OpenStruct.new
example_data.each do |key,
value|
obj.send “#{key}=”,
value
end
p
obj

or

just:
obj2 = OpenStruct.new
example_data
p obj2