ror – 在has_many和belongs_to的两端包含外键?
我inheritance的代码有:
class Graphic 'asset_id', :conditions => 'asset_type_id = 5', :order => 'created_at', :dependent => :destroy class Comment :asset_id
在我看来,像has_many不应该有foreign_key(它在belongs_to中被引用,我相信)但我不确定,你知道吗?
也就是说
class Graphic 'asset_type_id = 5', :order => 'created_at', :dependent => :destroy class Comment :asset_id
我认为你正在尝试做一些已经在Rails中烘焙过的东西。 你应该在这里使用多态关联。
class Comment belongs_to :asset, :polymorphic => true end class Graphic has_many :comments, :as => :assets end
这样,您需要在任何一方都声明foreign_key。
在rails的has_many
语句中, :foreign_key
确实是一个在ActiveRecord文档中具有此描述的选项:
指定用于关联的外键。 默认情况下,这被认为是小写的这个类的名称和后缀“_id”。 因此,创建has_many关联的Person类将使用“person_id”作为默认值:foreign_key。
因此,在您的情况下,您似乎需要has_many
语句中的foreign_key
属性,因为它与类的名称不同。
但是,您的belongs_to
语句中不需要foreign_key
声明。 以下是ActiveRecord文档中 belongs_to
关系的:foreign_key
选项的说明 :
指定用于关联的外键。 默认情况下,这被认为是具有“_id”后缀的关联的名称。 因此,定义belongs_to:person关联的类将使用“person_id”作为默认值:foreign_key。 类似地,belongs_to:favorite_person,:class_name =>“Person”将使用“favorite_person_id”的外键。
我假设你真正打算为你的Comment
课写的是这样的:
class Comment < ActiveRecord::Base belongs_to :graphic, :foreign_key => :graphic_id
在这种情况下,您可以将belongs_to
语句简化为:
belongs_to :graphic