因此,我正在创建类似于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.
谢谢。
答案 0 :(得分:2)
因此,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