ruby on rails - Mutiple has_one of the same class -


got interesting situation has_one , belongs_to relationships when rails loads dependant models in inversed manner.

let have model couple 2 related models of same class, user:

class couple < activerecord::base   has_one :male, class_name: "user"   has_one :female, class_name: "user" end  class user < activerecord::base   belongs_to :couple end 

in situation, when create couple , assign 2 instances of user, this:

# create stuff couple = couple.new = user.create name: 'bob' = user.create name: 'sara' couple.male = couple.female = couple.save  # here's gap begins: couple.male.name # => 'bob' couple.female.name # => 'sara'  # ok, far good... couple.find(couple.id).male.name # => 'bob'  # what's ..?! couple.find(couple.id).female.name # => 'bob' 

and i've seen in console performing these, this:

> couple.female.name 'sara' # nothing happens model loaded  > couple.find(couple.id).female.name select  `couples`.* `couples` `couples`.`id` = 2 limit 1 select  `users`.* `users` `users`.`couple_id` = 2 limit 1 'bob' # sure, here's trouble! 

hmmm... that's not good... searching on internet guided me this: created 2 classes, maleuser , femaleuser, both derived user model. , changed belongs_to :couple belongs_to :couple, foreign_key: :his_id , ... :her_id. yet, same result seen on screen.

my question is, why hell happens , how perform loading in correct manner? couple.find(couple_id).she gave me proper object?

upd: tables structure:

create_table :users |t|   t.integer :couple_id   # ... end  create_table :couples |t|   t.integer :his_id   t.integer :her_id   # ... end 

thanks!

the relationship users in couple needs belongs_to relationship , not has_one. e.g:

class couple < activerecord::base   # ...   belongs_to :male, :class_name => 'user', :foreign_key => 'his_id'   belongs_to :female, :class_name => 'user', :foreign_key => 'her_id' end 

this tells activerecord couple has 2 user object relations. 1 named male can retrieved id found in his_id column of couple table , 1 named female who's id found in her_id column.

whereas has_one relationship data on users table (which doesn't exist). users table references couple_id , not whether user male or female user couple relationship.


Comments

Popular posts from this blog

javascript - Wordpress slider, not displayed 100% width -

ruby on rails - RuntimeError: Circular dependency detected while autoloading constant - ActiveAdmin.register Role -

c++ - OpenMP unpredictable overhead -