Нечетное поведение ActiveRecord - ведет себя по-разному в зависимости от порядка ассоциаций - PullRequest
0 голосов
/ 01 октября 2010

Я обнаружил довольно странное поведение активной записи рельсов.Это происходит в рельсах 2.3.9, а не в рельсах 3.

Вот как это можно воспроизвести.(Или просто клонируемый пример репозитория github: git clone git: //github.com/gonchs/rails-2.3.9-odd-association-behavior-example.git)

class User < ActiveRecord::Base
  has_one :parent
  has_one :contact, :through => :parent
end

class Contact < ActiveRecord::Base
  has_one :parent
  has_one :user, :through => :parent
end

class Parent < ActiveRecord::Base
  belongs_to :user
  belongs_to :contact
end

сам.В первом примере все идет как надо.Во втором случае он ведет себя неожиданно.

Откройте скрипт / консоль и выполните:

user = User.new
user.contact = Contact.new
user.parent = Parent.new
user.contact
=> #<Contact id: nil, created_at: nil, updated_at: nil> 

user = User.new
user.parent = Parent.new
user.contact = Contact.new
user.contact
=> nil

Есть идеи, почему это происходит?Это ошибка или я что-то здесь упускаю?

1 Ответ

0 голосов
/ 02 октября 2010

Кажется, что в моделях есть избыточность ... ассоциации кажутся немного оторванными ...

В зависимости от того, где фактические внешние ключи находятся в таблицах, я бы выбрал либо through, либо has_one ...

class User < ActiveRecord::Base
  has_one :parent
end

class Contact < ActiveRecord::Base
  has_one :user, :through => :parent
end

class Parent < ActiveRecord::Base
  belongs_to :user
  belongs_to :contact
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...