6

我在我的应用程序中使用'foriegner' gem 来设置主键,现在我可以在表中设置复合主键。

我在网上搜索了这个,但无法找到一个明确的解决方案。

如果可以使用外国人 gem 或任何其他方式在 Rails 应用程序中设置复合键,请建议我。

注意:我正在使用 Postgres

谢谢。

4

2 回答 2

2

活动记录

ActiveRecord有一个名为composite_primary_keys并集成了这些功能的 gem。

它支持广泛的 ActiveRecord 版本

# Gemfile
gem 'composite_primary_keys', '=<version for your AR version>'

像下面的例子一样使用它:

class Membership < ActiveRecord::Base
  self.primary_keys = :user_id, :group_id
end

membership = Membership.find([1,1])  # composite ids returns single instance
# => <Membership:0x39218b0 @attributes={"user_id"=>"1", "group_id"=>"1"}>

我很高兴在生产中使用它,保持我的架构干净整洁。

更好的选择:续集

与往常一样,如果您正在寻找一个出色的 Ruby + PostgreSQL 解决方案,那么jeremyevans/sequel.

它具有大量功能,包括复合主键。盒子外面。

因此,如果您正在开始一个新项目(显然是在 PostgreSQL 上),请省去 ActiveRecord 的麻烦,并使用 Sequel。

class Post < Sequel::Model
  set_primary_key [:category, :title]
end
于 2017-02-12T09:14:25.340 回答
1

简短的回答:不要在 Rails 中使用复合 PK(除非您因为遗留数据库而被迫这样做)。

虽然(目前)可能有可用的 gem 解决方案,但这并不是 ActiveRecord 的工作方式。除非有充分的理由,否则我也不会在 Rails 之外使用复合 PK。它们使很多事情变得更加复杂。

但是:没有什么能阻止您将您认为的复合主键作为替代键并拥有 Rails 默认 PK(postgres:伪类型'serial',它从序列中提取其值)。只需确保为构成您的键的那些列添加唯一索引。

于 2016-04-19T13:56:53.350 回答