我正在使用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
。
有关为何非常感谢的任何线索!
谢谢!
答案 0 :(得分:1)
您的关系/外键设置为交叉目的。
如果Attribute
has_one
Multimedia
,您需要Multimedia
模型声明belongs_to :attribute
,Multimedia
表格包含外国人Attribute
的关键。
我猜你不能改变你的数据库模式(否则,我不得不问你为什么要使用非Rails标准表和键名);在这种情况下,你想要切换关系的意义。制作Attribute belongs_to :multimedia
和Multimedia has_one :attribute
。然后Multimedia
表中的Attribute
FK指向正确的方向。