Внешний ключ ActiveRecord установлен в нуль - PullRequest
0 голосов
/ 31 октября 2011

Я использую Ruby 1.8.7 и Rails 2.3.8, и у меня есть следующий корневой ресурс:

class PointOfInterest < ActiveRecord::Base
  set_primary_key "Id"
  set_table_name  "POI"

  has_many :attributes, :foreign_key => 'POIId'
end

Интересующий объект может иметь несколько атрибутов:

class Attribute < ActiveRecord::Base
  set_primary_key "Id"
  set_table_name  "Attribute"

  belongs_to :point_of_interest, :foreign_key => 'POIId'

  has_one :multimedia, :foreign_key => 'Id', :primary_key => 'Value'
end

Класс атрибута может иметь носитель, связанный с ним:

class Multimedia < ActiveRecord::Base
  set_primary_key "Id"
  set_table_name  "Multimedia"
end

Я пытаюсь вставить точку интереса в мою базу данных, например, так:

poi = PointOfInterest.new
attr = poi.attributes.new
attr.SomeAttribute = 1
attr.build_multimedia(:content => 'test')
poi.save

Это правильно сохраняет оба корневых(PointOfInterest) и запись Multimedia.Attribute, однако, не сохраняется должным образом.Хотя внешний ключ к точке интереса установлен правильно (POIId), внешний ключ к записи Multimedia остается null.

Любая подсказка о том, почему это очень ценится!

Спасибо!

1 Ответ

1 голос
/ 31 октября 2011

Ваши отношения / внешний ключ установлены в перекрестных целях.

Если Attribute has_one Multimedia, то вам нужна модель Multimedia для объявления belongs_to :attribute, а таблица Multimedia должна содержать внешний ключ для Attribute.

Я предполагаю, что вы не можете изменить схему базы данных (в противном случае мне пришлось бы спросить, почему вы используете нестандартные Rails-таблицы и имена ключей); в этом случае вы хотите переключить смысл отношения. Сделайте Attribute belongs_to :multimedia и Multimedia has_one :attribute. Тогда Multimedia FK в таблице Attribute указывает в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...