Ruby on rails ActiveRecord双向外键。

Ruby on rails ActiveRecord双向外键。,ruby-on-rails,database,activerecord,foreign-keys,associations,Ruby On Rails,Database,Activerecord,Foreign Keys,Associations,我正在MYSQL中使用一些开放的政府数据,这些数据已经导入到我的rails应用程序中 我用自己的一些表扩展了数据库,并在表中使用rails提供的列ID 但是,原始数据库的表通过唯一的“ndb”id链接 我认为通过在模型之间交叉引用两个:foreign\u key=>'ndb',我可以正确链接表,但是通过:foreign\u key,它似乎将一个表的id链接到另一个表的ndb列 我的模特看起来像这样 class Food < ActiveRecord::Base has_many :weig

我正在MYSQL中使用一些开放的政府数据,这些数据已经导入到我的rails应用程序中

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

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

我认为通过在模型之间交叉引用两个:foreign\u key=>'ndb',我可以正确链接表,但是通过:foreign\u 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”列是食物和体重表之间的链接,而不是食物id到ndb的链接?

您是否尝试在AR类中设置“ndb”主键

文档。

您是否尝试在AR类中设置主键“ndb”


文档。

作为一个可能的临时解决方案,我所做的是使用:finder\u 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}'
我不确定这是否是最好的解决方案,但它似乎起到了作用。

作为一个可能的临时解决方案,我所做的是使用:finder\u 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}'
我不确定这是否是最好的解决方案,但它似乎起了作用。

我没有尝试过,但我仍然需要在其他查询中使用_id字段,因为并非所有内容都通过该“ndb”字段链接,这就是我所说的“扩展数据库以使用我自己的一些表”,因此70%的时间,我使用的是标准的rails ID,但有时我需要将“ndb”链接到ndb,对需要它的表使用set_primary_键将是一个开始,这样就可以让find之类的工作正常进行。它还将为关联设置默认值。对不起,可能我不清楚。对于像food table这样的东西,我70%的时间使用id字段,其余30%的时间使用rails标准,我需要通过ndb字段将foods table链接到另一个类似于table的权重。在模型上设置set_primary_键会中断70%的关系。除非我错过了什么。一旦我将“ndb”设置为主键,我似乎无法将两个id为的表连接到food_idI没有尝试过,但我仍然需要在其他查询中使用_id字段,因为并非所有内容都通过该“ndb”字段链接,这就是我所说的“扩展数据库以使用我自己的一些表”,所以70%的时间,我使用的是标准的rails ID,但有时我需要将“ndb”链接到ndb,对需要它的表使用set_primary_键将是一个开始,这样就可以让find之类的工作正常进行。它还将为关联设置默认值。对不起,可能我不清楚。对于像food table这样的东西,我70%的时间使用id字段,其余30%的时间使用rails标准,我需要通过ndb字段将foods table链接到另一个类似于table的权重。在模型上设置set_primary_键会中断70%的关系。除非我错过了什么。一旦我将“ndb”设置为主键,我似乎无法将两个id为的表连接到food_id