Colin S. wrote:
Well, technically it will be a Rails object, so I don’t create it,
ActiveRecord does, but I bet the send(part) thing will work. Thanks.
This will make a really LOOOOONG table get generated with a few lines
of code instead.
–Colin
In case you wanted an explanation of how things work, take a look at
this example:
class Human
def knee=(str)
@knee = str
end
def knee
return @knee
end
end
fred = Human.new
fred.knee = ‘plastic’
puts fred.knee
—>plastic
When you write:
fred.knee = ‘plastic’
you are actually calling a method–the method named ‘knee=’. In Ruby,
method names can have characters like ‘=’ and ‘?’ in them. When the
method ‘knee=’ is called, the statement in the body of the method is
executed, and that statement assigns a value to the member variable
@knee.
Likewise, when you write:
puts fred.knee
that calls the method named ‘knee’, and the knee method is defined to
return the value of the member variable @knee.
Therefore, the problem you were faced with becomes: how do you call a
method if you have the name of the method as a string. That’s where
Object#send comes in–it allows you to do just that.
Although it wouldn’t make much sense, you could actually define the
knee= method like this:
class Human
def knee=(str)
@head = str
end
def head
return @head
end
end
fred = Human.new
fred.knee = ‘steel’
puts fred.head
—>steel