奇数ActiveRecord行为 - 基于关联顺序的行为不同

时间:2010-10-01 18:10:26

标签: ruby-on-rails ruby

我发现rails的activerecord非常奇怪。 这发生在rails 2.3.9中,而不是在rails 3中。

以下是如何重现它。 (或者只是克隆我创建的github repo示例: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 :(得分:0)

模型中似乎存在冗余......这种关联似乎有点过时了......

根据表中实际外键的位置,我会取出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