我发现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
任何想法为什么会发生这种情况?这是一个错误还是我错过了什么?
答案 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