Search code examples
ruby-on-railsrubyactiveresource

Rename ActiveResource properties


I am consuming JSON data from a third party API, doing a little bit of processing on that data and then sending the models to the client as JSON. The keys for the incoming data are not named very well. Some of them are acronyms, some just seem to be random characters. For example:

{
  aikd: "some value"
  lrdf: 1 // I guess this is the ID
}

I am creating a rails ActiveResource model to wrap this resource, but would not like to access these properties through model.lrdf as its not obvious what lrdf really is! Instead, I would like some way to alias these properties to another property that is named better. Something so that I can say model.id = 1 and have that automatically set lrdf to 1 or puts model.id and have that automatically return 1. Also, when I call model.to_json to send the model to the client, I dont want my javascript to have to understand these odd naming conventions.

I tried

alias id lrdf

but that gave me an error saying method lrdf did not exist.

The other option is to just wrap the properties:

def id
  lrdf
end

This works, but when I call model.to_json, I see lrdf as the keys again.

Has anyone done anything like this before? What do you recommend?


Solution

  • Have you tried with some before_save magic? Maybe you could define attr_accessible :ldrf, and then, in your before_save filter, assign ldrf to your id field. Haven't tried it, but I think it should works.

    attr_accessible :ldrf
    
    before_save :map_attributes
    
    protected
      def map_attributes
        {:ldrf=>:id}.each do |key, value|
          self.send("#{value}=", self.send(key))
        end
      end
    

    Let me know!