2012-03-06 56 views
0

我有一个有问题的关系,其中可以绑定到汽车中的项目。可能在AR关系模型中有两个不同的外键

例如:

class Item < ActiveRecord::Base 
    has_many :object_connections, :foreign_key => 'engine_id' 
    has_many :object_connections, :foreign_key => 'chassis_id' 

它看起来像它看起来只是在最后。有什么方法可以指定?另外,是否可以添加条件如:is_engine => true?这是一个被采纳的项目,只是试图让这个工作。

THX

+0

您只能在模型中使用关联名称(即'has_many'后面的第一个参数)。你能告诉我们更多关于你的模型吗? ObjectConnection有什么关联?还有发动机和底盘车型吗? – 2012-03-06 22:02:19

+0

基本上,有物品,有object_connection是由'物品'组成的。项目在内部作为引擎或底层进行管理。这部分是模式的最好部分。我怀疑我只需要做这个习惯,因为我们只是在查询中真正做到这一点。看起来像条件​​查询其他表没有太多的帮助。 – timpone 2012-03-06 22:07:24

+0

内部管理如何?您能否向我们展示其他三种模型的关联代码和相关数据库字段? – 2012-03-06 22:39:56

回答

0

我认为你正在寻找一个has_one association:class_name选项:

class Item < ActiveRecord::Base 
    has_one :engine, :foreign_key => 'engine_id', :class_name => 'ObjectConnection' 
    has_one :chassis, :foreign_key => 'chassis_id', :class_name => 'ObjectConnection' 
end 

的关联需要被唯一命名的,通常的ActiveRecord可以计算出基于关联的:class_name;然而,你有两样东西指向同一个地方,所以你必须手工把它连接起来。

相关问题