Belongs_to关系表现不尽如人意

时间:2015-03-17 21:00:57

标签: ruby-on-rails ruby-on-rails-4 activerecord has-many belongs-to

我有以下两个对象:

class Layout < ActiveRecord::Base

  has_many :content_panels, foreign_key: :layout_uuid, primary_key: :uuid
  . . .
end

class ContentPanel < ActiveRecord::Base

    belongs_to :layout, foreign_key: :layout_uuid, primary_key: :uuid
    . . .
end

如果我执行以下操作:

layout = Layout.create
=> #<Layout id: 42, uuid: nil>

我希望以下工作

content_panel = layout.content_panels.create
=> #<ContentPanel id: 31, layout_id: nil, layout_uuid: nil, uuid: nil>

。 。 。它确实如此,除非我打电话:

content_panel.layout 
=> nil

我总是得到nil我应该获得我创建的layout对象?

但如果我打电话:

layout.content_panels
=> #<ActiveRecord::Associations::CollectionProxy [#<ContentPanel id: 31, layout_id: nil, layout_uuid: nil, uuid: nil>]>

我得到一个包含我在上面创建的content_panel的对象列表。

是什么让我的content_panel.layout值始终等于nil而不是它所属的对象?

1 个答案:

答案 0 :(得分:0)

您的layout = Layout.create来电未创建uuid,您将其用作关联两个模型的主键。因此,如果没有设置uuid,则Rails无法在layout_uuid中设置ContentPanel,因此无法在数据库中记录关联。