1

我在MYSQL中使用了一些打开的gov数据,我已经导入到我的rails应用程序中。ActiveRecord双向外键。

我已经用我自己的一些表扩展了数据库,并在我的表中使用rails提供的列id。

但是,原始数据库的表通过唯一的'ndb'id链接。

我认为通过在两个模型之间交叉引用两个:foreign_key=>'ndb'我会得到正确链接表,但通过:foreign_key,它似乎将一个表的id链接到另一个表的ndb列。

我的模型看起来像这样

 
class Food < ActiveRecord::Base 
has_many :weights, :foreign_key=>'ndb' 
has_many :food_names 
end 

class Weight < ActiveRecord::Base 
belongs_to :food, :foreign_key=>'ndb' 

是否有指定的“NDB”栏中,而不是食品和权重表之间的联系,将food_id到NDB的方法吗?

回答

0

我作为一个可能的临时解决方案所做的工作是使用:finder_sql将表链接在一起。

我的食物模型现在有:

 
class Food < ActiveRecord::Base 
    has_many :weights, :finder_sql =>'Select weights.* FROM weights LEFT JOIN foods ON foods.ndb=weights.ndb WHERE foods.id=#{id}' 

我不知道这是否是最好的解决办法或不是,但它似乎是工作。

0

您是否在AR类中尝试过set_primary_key 'ndb'

set_primary_key docs。

+0

我还没有尝试过,但我仍然需要在其他查询中使用_id字段,因为并非所有东西都通过'ndb'字段链接,这就是我的意思是'扩展数据库以使用我的一些自己的表',所以70%的时间,我使用标准的轨道ID,但有时我需要链接'ndb到NDB' – pedalpete 2011-04-19 17:59:00

+0

那么,使用set_primary_key为那些需要它的表将是一个开始,让事情像find()一样工作。它还会设置关联的默认值。 – noodl 2011-04-19 18:05:12

+0

对不起,也许我不清楚。对于像食物表这样的东西,我使用id字段70%的时间(坚持使用rails标准),另外30%的时间使用id字段,我需要将食物表链接到另一个表,如通过ndb字段的重量。在模型上设置set_primary_key会打破这些关系的70%。除非我错过别的东西。一旦我设置'ndb'作为主键,我似乎无法将两个带ID的表连接到food_id – pedalpete 2011-04-19 18:46:27