ActiveRecord associations: design question

Hi guys,

In my Rails app, I have three models: A, B and C, with the following
relationships:

  • B hasMany C
  • C belongsTo B

I would like A to “has_one” instance of B+C. By that I mean A needs to
be linked to a specific instance of B AND a specific instance of C.

My first guess would be to create a fourth object, say B_plus_C that
would:

  • belongs to B
  • belongs to C
  • belongs to A

Is it a correct way to do this? I am not sure why, but it feels a bit
weird to have to create a model for this.

Thanks a lot!
PJ

On 25 February 2013 18:03, PierreW [email protected] wrote:

Hi guys,

In my Rails app, I have three models: A, B and C, with the following
relationships:

  • B hasMany C
  • C belongsTo B

I would like A to “has_one” instance of B+C. By that I mean A needs to
be linked to a specific instance of B AND a specific instance of C.

You don’t need to specify the A:B relationship. Just specify A
has_one C, C belongs_to A (or the other way round if you prefer) then
if you have a A in @a the C object is @a.c.b.

Colin

Oh. Absolutely. Much, much better. Thanks a lot!

PJ

On 25 February 2013 23:19, PierreW [email protected] wrote:

relationships:

  • B hasMany C
  • C belongsTo B

I would like A to “has_one” instance of B+C. By that I mean A needs to
be linked to a specific instance of B AND a specific instance of C.

You don’t need to specify the A:B relationship. Just specify A
has_one C, C belongs_to A (or the other way round if you prefer) then
if you have a A in @a the C object is @a.c.b.

In addition if A has_one C then you can say A has_one b through C and
then you can say @a.b, or if A belongs_to C then you use delegate so
that again you can say @a.b. There is no advantage at run time to
these but they may make your code simpler.

Colin

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs