# Undefined method 'a=' when initializing an object

**URL:** <https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430>\
**Category:** Ruby\
**Created:** [June 21, 2007, 7:06pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430 "2007-06-21T19:06:13Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![bparanj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e9a140/32.png) [@bparanj](https://www.ruby-forum.com/u/bparanj)\
**Post date:** [June 21, 2007, 7:06pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430/1 "2007-06-21T19:06:13Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![bparanj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e9a140/32.png) [@bparanj](https://www.ruby-forum.com/u/bparanj)\
**Post date:** [June 21, 2007, 9:17pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430/2 "2007-06-21T21:17:28Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![bparanj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e9a140/32.png) [@bparanj](https://www.ruby-forum.com/u/bparanj)\
**Post date:** [June 21, 2007, 9:03pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430/3 "2007-06-21T21:03:27Z")

</div>

On 6/21/07, Bala P. [removed\_email\_address@domain.invalid](mailto: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?

---

<div class="post-metadata">

**Author:** ![bparanj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e9a140/32.png) [@bparanj](https://www.ruby-forum.com/u/bparanj)\
**Post date:** [June 21, 2007, 9:23pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430/4 "2007-06-21T21:23:29Z")

</div>

On 6/21/07, Bala P. [removed\_email\_address@domain.invalid](mailto: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.

---

<div class="post-metadata">

**Author:** ![bparanj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e9a140/32.png) [@bparanj](https://www.ruby-forum.com/u/bparanj)\
**Post date:** [June 21, 2007, 9:32pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430/5 "2007-06-21T21:32:30Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![bparanj](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/e9a140/32.png) [@bparanj](https://www.ruby-forum.com/u/bparanj)\
**Post date:** [June 21, 2007, 9:31pm UTC](https://www.ruby-forum.com/t/undefined-method-a-when-initializing-an-object/107430/6 "2007-06-21T21:31:30Z")

</div>

On Jun 21, 10:05 am, “Bala P.” [removed\_email\_address@domain.invalid](mailto: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
