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