1

я следующие два объекта: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 равным нулю, а не объектом, к которому он принадлежит?

ответ

0

Ваш звонок layout = Layout.create не создает uuid, который вы используете в качестве основного ключа, чтобы связать ваши две модели. Таким образом, без uuid установите, что Rails не может установить layout_uuid в ContentPanel и, следовательно, нет возможности для записи ассоциации в БД.