Forum: Ruby undefined method 'a=' when initializing an object

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Bala P. (Guest)
on 2007-06-21 21:06
(Received via mailing list)
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.
Gregory B. (Guest)
on 2007-06-21 23:03
(Received via mailing list)
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?
Bala P. (Guest)
on 2007-06-21 23:17
(Received via mailing list)
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.
Gregory B. (Guest)
on 2007-06-21 23:23
(Received via mailing list)
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.
unknown (Guest)
on 2007-06-21 23:31
(Received via mailing list)
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
Bala P. (Guest)
on 2007-06-21 23:32
(Received via mailing list)
Thanks Greg, your suggestion worked. Ruby community support rocks!
This topic is locked and can not be replied to.