【问题标题】:ActiveRecord two way foreign key.ActiveRecord 双向外键。
【发布时间】:2011-04-19 17:29:20
【问题描述】:

我在 MYSQL 中使用了一些开放的 gov 数据,这些数据已导入到我的 rails 应用程序中。

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

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

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

我的模型是这样的

食品类 'ndb' has_many :food_names 结尾 类权重 'ndb'

有没有办法指定 'ndb' 列是食物和重量表之间的链接,而不是食物 ID 到 ndb?

【问题讨论】:

    标签: ruby-on-rails database activerecord foreign-keys associations


    【解决方案1】:

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

    set_primary_key 文档。

    【讨论】:

    • 我没有尝试过,但我仍然需要在其他查询中使用 _id 字段,因为并非所有内容都通过“ndb”字段链接,这就是我所说的“扩展数据库”使用我自己的一些表',所以 70% 的时间,我使用标准的 rails id,但有时我需要将 'ndb 链接到 ndb'
    • 好吧,对那些需要它的表使用 set_primary_key 将是一个开始,允许 find() 之类的东西工作。它还将为关联设置默认值。
    • 抱歉,我可能不太清楚。对于食物表之类的东西,我 70% 的时间使用 id 字段(坚持使用 rails 标准),另外 30% 的时间,我需要通过 ndb 字段将该食物表链接到另一个表,如权重。在模型上设置 set_primary_key 会破坏 70% 的这些关系。除非我错过了其他东西。一旦我将“ndb”设置为主键,我似乎无法将两个带有 id 的表连接到 food_id
    【解决方案2】:

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

    我的食物模型现在有:

    食品类 '选择权重。* FROM weights LEFT JOIN foods ON foods.ndb=weights.ndb WHERE foods.id=#{id}'

    我不确定这是否是最佳解决方案,但它似乎有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2021-07-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 2019-03-19
      • 1970-01-01
      相关资源
      最近更新 更多