我正在继承具有以下代码的代码:
class Graphic < ActiveRecord::Base
has_many :comments, :foreign_key => 'asset_id',
:conditions => 'asset_type_id = 5',
:order => 'created_at', :dependent => :destroy
class Comment < ActiveRecord::Base
belongs_to :graphic, :foreign_key => :asset_id
在我看来,像has_many不应该有foreign_key(它在belongs_to中被引用,我相信)但是我不确定,你知道吗?
即。应该是
class Graphic < ActiveRecord::Base
has_many :comments,
:conditions => 'asset_type_id = 5',
:order => 'created_at', :dependent => :destroy
class Comment < ActiveRecord::Base
belongs_to :graphic, :foreign_key => :asset_id
答案 0 :(得分:3)
在导言的has_many
语句中,:foreign_key
确实是一个选项,在ActiveRecord documentation中有此描述:
指定用于关联的外键。默认情况下,这被认为是小写的这个类的名称和后缀“_id”。因此,创建has_many关联的Person类将使用“person_id”作为默认值:foreign_key。
因此,在您的情况下,您似乎需要foreign_key
语句中的has_many
属性,因为它与类的名称不同。
但是,您的foreign_key
声明中不需要belongs_to
声明。以下是the ActiveRecord documentation中:foreign_key
关系belongs_to
选项的说明:
指定用于关联的外键。默认情况下,这被认为是具有“_id”后缀的关联的名称。因此,定义belongs_to:person关联的类将使用“person_id”作为默认值:foreign_key。同样,belongs_to:favorite_person,:class_name =&gt; “Person”将使用“favorite_person_id”的外键。
我假设你真正想为你的Comment
课写的是:
class Comment < ActiveRecord::Base
belongs_to :graphic, :foreign_key => :graphic_id
在这种情况下,您可以将belongs_to
语句简化为:
belongs_to :graphic
答案 1 :(得分:3)
我认为你正在尝试做一些已经在Rails中出现的东西。您应该在这里使用多态关联。
class Comment
belongs_to :asset, :polymorphic => true
end
class Graphic
has_many :comments, :as => :assets
end
这样,你需要在任何一方都声明foreign_key。