我正在尝试使用joins连接两个表。但是由于Active Record referential integrity,我无法加入表格。 (进一步阅读以获得适当的理解)
我的模型如下:
每个团队都会订阅某些类型的警报。 Subscriptions
表具有2个外键,即team_id
和kind_id
,分别引用表Teams
和Alerts
的主键。
我在添加的位置创建了迁移:
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
})
我在做什么错了?
答案 0 :(得分:1)
您还需要在region_A redirection_pointer
ObjectB 11111
模型中的相应ObjectA
关系上指定外键。当前,您已经在has_many
模型上指定了外键条件。 Alert
现在可以使用。但是,问题中提到的联接是从Subscription
端开始的,这就是为什么它不能按预期工作的原因,因为我们没有告诉Subscription.joins(:alerts)
模型来检查其他外键。 / p>
这可以如下进行:
Alert