additional model attributes

Hi,
i have a "place" model with 2 columns (id, name).
I'm calling an external api which gives me data to create a new place
object.

I would like to add the address from the external place to the place
object and render it as a json result, without storing it in the
database.

i don't get any errors, but the address never shows up within the json
output. i've tried with attr_accessor but that didn't work either.

any hints?

thanks

Hi,
i have a "place" model with 2 columns (id, name).
I'm calling an external api which gives me data to create a new place
object.

I would like to add the address from the external place to the place
object and render it as a json result, without storing it in the
database.

i don't get any errors, but the address never shows up within the json
output. i've tried with attr_accessor but that didn't work either.

foo.to_json(:methods => [:attr1, :attr2])
Maybe? (assuming that foo.attr1 returns one of your extra attributes)

Fred.

hi,
that works but not in the case when i would like to do something like
this:

user_place = Location.new(:place => place, :user => user)

user_place.to_json //address is missing

I think for Rails to recognize that the attribute should be included, you need to use attr_accessible rather than the Ruby method attr_accessor.

hm.. no luck with that either. when i try to print out the places object
in the console (logger.debug @place.to_yaml), "address" is missing.

hm.. no luck with that either. when i try to print out the places object
in the console (logger.debug @place.to_yaml), "address" is missing.

For json at least you could override the as_json method to add the attributes you want.

Fred

From the top of my head (not hard tested now).

Now you refer to to_yaml, in previous mails, you refered to to_json.

Be careful, there is a fundamental difference between to_xml, to_json,

to_yaml on ActiveRecord …

One of them (I believe to_yaml) prints the “raw” database column values,

even if you overwrite that accessor function with a name. The other two

(to_json, to_xml IIRC) use the attribute accessors (from ActiveRecord I

presume), that can be overwritten by your own code.

So, I would expect to_yaml to never work in this scenario (where there is

no database column). But to_json should be possible in this scenario

(I did some simple tests with ActiveModel and that seemed to work as

expected).

HTH,

Peter

One alternative in terms of dynamically adding an attribute to a model
instance (without having to have pre-defined any attr_... in the
class):

  ...
  place = Place.new
  place.name = place.name
  place.id = place.id
  place['address'] = external_api_place_data.address
  ...

From then on, for that instance, you can call place.address, and it
will show up in place.to_json (since to_json is generated from
place.attributes, which now has a k/v for address in attributes).

Jeff