has_one 关联方法对我来说执行不一致,我不知道为什么。
取两个相互关联的简单模型:
class Container < ActiveRecord::Base
has_one: :super
end
class Super < ActiveRecord::Base
belongs_to: :container
end
以下代码可以正常工作:
container = Container.create
...
container.build_super
...
=> #<Super id: nil, container_id: 1, content: nil, created_at: nil, updated_at: nil>
container.super
=> #<Super id: nil, container_id: 1, content: nil, created_at: nil, updated_at: nil>
在上述代码中调用 container.super 时,它会返回新建的 Super 类实例。
但是,以下代码不起作用:
Container.create
...
=> #<Container id: 1, created_at: "2013-10-26 20:31:26", updated_at: "2013-10-26 20:31:26">
Container.first.build_super
...
=> #<Super id: nil, container_id: 1, content: nil, created_at: nil, updated_at: nil>
Container.first.super
Container Load (0.2ms) SELECT "containers".* FROM "containers" ORDER BY "containers"."id" ASC LIMIT 1
Super Load (0.1ms) SELECT "supers".* FROM "supers" WHERE "supers"."container_id" = ? ORDER BY "supers"."id" ASC LIMIT 1 [["container_id", 1]]
=> nil
Container.first.super 返回 nil,因为它似乎正在数据库中寻找 Super 的实例。但是,该实例尚未提交。
但是为什么 container.super 和 Container.first.super 在 container == Container.first 时不会产生相同的结果?