Forum: Ruby on Rails ActiveRecord: mapping column names when using legacy schemat

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.
tilo (Guest)
on 2007-04-27 03:47
(Received via mailing list)
I have an ActiveRecord question...

I have a legacy MySQL database with a weird naming convention - all
table and column names have a prefix '_' ,  which is annoying, and
some
of the column names are plain misnomers.

I would like to apply a pre-defined mapping between MySQL column names
and method names to be used in the Ruby class, without having the
underlying
column names being visible anymore.

How can I pre-define a static mapping of all (legacy) column names to
new
Class method names?

e.g.: given legacy schema:

Table _fix has columns:
   _job
   _ change
   _date
   _effect

When defining the Ruby class, I'd like to do something like this:

class Fix < ActiveRecord::Base
   self.table_name = "_fix"
   use_mapping (                    # imaginary construct..
       :_job => "job_id",
       :_change => "change_id" ,
       :_date => "date" ,
       :_effect => "status")

   self.primary_key = "job_id"   # no more reference to _job column
end

and want to access it like this:

   Fix.find( id ).status = "partial fix"   # should update the column
_effect in table _fix

   # and i want to see this :-)

   Fix.find( id )._job
    NoMethodError: undefined method '_job' for ...
   Fix.find( id )._effect
    NoMethodError: undefined method '_effect' for ...

The schema of the underlying legacy database should not be modified in
any way.

Is there a way to do this?  Is there a way to code a helper method for
ActiveRecord::Base
which does the above mapping?

thanks

   Tilo
This topic is locked and can not be replied to.