looking up accessor methods for ActiveRecord objects

Hi,

I am trying to invoke a method on an ActiveRecord object using something
like:

k = :date=
obj.method(k).call(new_date)

Initially obj.method(k) is throwing a NameError. However, if I first
explicitly invoke _any_ accessor method, then the above works as
expected:

obj.date # just get the date
k = :date=
obj.method(k).call(new_date) # works now

Is there a good way to ensure that these accessor methods are loaded
before
I try looking them up with .method()?

Thanks,
Erik

Is there a good way to ensure that these accessor methods are loaded
before
I try looking them up with .method()?

   obj.public_methods.include('k')

? (Also I can't remember if k must be a symbol - :k)

BTW I doubt your premise, because I thought all attribute accessors get generated at .find time...

Hi --

Hi,

I am trying to invoke a method on an ActiveRecord object using something
like:

k = :date=
obj.method(k).call(new_date)

Initially obj.method(k) is throwing a NameError. However, if I first
explicitly invoke _any_ accessor method, then the above works as
expected:

obj.date # just get the date
k = :date=
obj.method(k).call(new_date) # works now

Interestingly, that will happen when you call any unknown method on
the object:

t

=> #<Team id: 277401923, name: "Persuaders", mascot: "Cat", ... >

t.methods.grep(/mascot/)

=> []

t.blah

NoMethodError: undefined method `blah' for #<Team:0x242e2d8>

t.methods.grep(/mascot/)

=> ["mascot", "mascot=", "mascot?"]

method_missing creates the column attributes immediately if they don't
exist, no matter what. The same thing happens with respond_to?

Is there a good way to ensure that these accessor methods are loaded
before
I try looking them up with .method()?

You could call define_attribute_methods on the class. That's basically
what method_missing does.

David

Hi --

Is there a good way to ensure that these accessor methods are loaded
before
I try looking them up with .method()?

  obj.public_methods.include('k')

The column attributes aren't there initially. (Try it; you'll see.)

? (Also I can't remember if k must be a symbol - :k)

BTW I doubt your premise, because I thought all attribute accessors get
generated at .find time...

No, find doesn't define the column attribute methods.

David