Access other model attributes directly with has_one, belongs_to ?

4 views
Skip to first unread message

Marli Ba

unread,
Oct 20, 2011, 1:18:05 PM10/20/11
to rubyonra...@googlegroups.com
So, I have 2 models A and B that share 5 common attributes and all other
attributes are different. So I wanted to extract these 5 out into one
common table and use has_one, belongs_to to knit it back together. So
now there are 3 tables with 1 having the shared properties, we'll call
this table C.

Table A
id
dollar_amount

Table B
id
quantity_on_hand

Table C
id
version

My question is, I want to access attributes from table C like they are
in table A, such as:

@a = a.new
a.version

and NOT
a.c.version

Is my only option to use method_missing?

Anyone got any ideas?

--
Posted via http://www.ruby-forum.com/.

Tim Shaffer

unread,
Oct 20, 2011, 3:24:28 PM10/20/11
to rubyonra...@googlegroups.com
I think what you're looking for is "delegate" which is a rails extension to Module:

http://api.rubyonrails.org/classes/Module.html#method-i-delegate

class ModelC < ActiveRecord::Base
  has_many :model_a
end

class ModelA < ActiveRecord::Base
  belongs_to :model_c
  delegate :version, :to => :model_c
end

Then you can call version on a ModelA instance like you want to.

Marli Ba

unread,
Oct 20, 2011, 3:41:51 PM10/20/11
to rubyonra...@googlegroups.com
Thanks, I think that is what I'm looking for!
Reply all
Reply to author
Forward
0 new messages