ActiveRecord外键设置为null

时间:2011-10-31 14:17:30

标签: ruby-on-rails ruby activerecord

我正在使用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 个答案:

答案 0 :(得分:1)

您的关系/外键设置为交叉目的。

如果Attribute has_one Multimedia,您需要Multimedia模型声明belongs_to :attributeMultimedia表格包含外国人Attribute的关键。

我猜你不能改变你的数据库模式(否则,我不得不问你为什么要使用非Rails标准表和键名);在这种情况下,你想要切换关系的意义。制作Attribute belongs_to :multimediaMultimedia has_one :attribute。然后Multimedia表中的Attribute FK指向正确的方向。