使用外键作为组合键的一部分

因此,我正在创建类似于Google Analytics(分析)的应用。用户在他的博客上安装了摘录的JS,并且JS发送与每个帖子相关的指标。安装它所需的唯一额外信息就是他的site_id(有点像Google Analytics(分析)ID)。该应用仅适用于wordpress,并且将为每个博客帖子创建posts表中的一个条目,因此我进行了以下迁移:

class CreatePosts < activeRecord::Migration[6.0]
  def change
   create_table :posts,primary_key: %i[id site_id] do |t|
      t.belongs_to :site,null: false
      t.bigint :id
      t.bigint :post_id
      t.string :url

      t.timestamps
    end
  end
end

我创建了这个复合键,外键(site_id)是其中的一部分。我想知道是否可以,是否会破坏activeRecord的任何方面。

我知道这看起来很奇怪,所以让我解释为什么我需要这个。

帖子的id将与wordpress博客帖子数据库中使用的ID相同,因此,假设我有两个用户,每个用户有一个站点,每个用户包含5个帖子。如果他们的博客帖子包含相同的id,这将是一个问题...但是,如果我有复合键site_id + post_id可以。我唯一关心的是,这是否会破坏activeRecord处理关联的方式。

我正在进行一些测试,并且一切似乎都可以正常运行,但是我不确定,因为尽管创建了帖子,但此警告不断出现:

WARNING: active Record does not support composite primary key.

posts has composite primary key. Composite primary key is ignored.

谢谢。

ch446909360 回答:使用外键作为组合键的一部分

因此,Rails ActiveRecord默认情况下不支持复合主键。这就是您将看到此消息(here is the source

的原因

但是,如果您想使用此功能,可以尝试使用composite_primary_keys gem

所以您可以做类似

的操作
# after installing the gem
class Post < ActiveRecord::Base
  self.primary_keys = :id,site_id
  ...
end
本文链接:https://www.f2er.com/3163444.html

大家都在问