Rails无法指定外键

时间:2019-12-27 09:10:33

标签: ruby-on-rails

我正在尝试使用joins连接两个表。但是由于Active Record referential integrity,我无法加入表格。 (进一步阅读以获得适当的理解)

我的模型如下:

  1. 团队
  2. 警报
  3. 订阅

每个团队都会订阅某些类型的警报。 Subscriptions表具有2个外键,即team_idkind_id,分别引用表TeamsAlerts的主键。

我在添加的位置创建了迁移:

add_foreign_key :subscriptions, :teams, column: :team_id, index: true, foreign_key: true
add_foreign_key :subscriptions, :alerts, column: :kind_id, index: true, foreign_key: true

并进行迁移。

此外,我在各个类中指定了关联。

class Subscription < ApplicationRecord
  belongs_to :alert, :foreign_key => 'kind_id'
  belongs_to :team

  validates :team_id, uniqueness: { scope: :kind_id }
end

但是当我尝试加入 Alert.joins(:subscription) 时,查询栏的形式是:

SELECT `alerts`.* FROM `alerts` INNER JOIN `subscriptions` ON `subscriptions`.`alert_id` = `alerts`.`id`

应有的位置:

SELECT `alerts`.* FROM `alerts` INNER JOIN `subscriptions` ON `subscriptions`.`kind_id` = `alerts`.`id`

(区别在于订阅表中的列名{应为kind_id而不是alert_id})

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

您还需要在region_A redirection_pointer ObjectB 11111 模型中的相应ObjectA关系上指定外键。当前,您已经在has_many模型上指定了外键条件。 Alert现在可以使用。但是,问题中提到的联接是从Subscription端开始的,这就是为什么它不能按预期工作的原因,因为我们没有告诉Subscription.joins(:alerts)模型来检查其他外键。 / p>

这可以如下进行:

Alert