如何在Rails应用程序中设置组合键

我在我的应用程序中使用’foriegner’gem来设置主键,现在我处于在表中设置复合主键的情况。

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

如果可以使用foreigner gem或任何其他方法在rails应用程序中设置复合键,请建议我。

注意:我使用的是Postgres

谢谢。

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

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

但是:没有什么可以阻止你将你认为的复合主键作为替代键,并且使用Rails默认PK(postgres:pseudotype’serial’从序列中绘制它的值)。 只需确保为构成密钥的列添加唯一索引。

ActiveRecord的

有一个名为composite_primary_keys的gem,它集成了ActiveRecord的这些function。

它支持各种ActiveRecord版本 。

 # Gemfile gem 'composite_primary_keys', '=' 

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

 class Membership < ActiveRecord::Base self.primary_keys = :user_id, :group_id end membership = Membership.find([1,1]) # composite ids returns single instance # => "1", "group_id"=>"1"}> 

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

更好的选择:续集

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

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

因此,如果您正在开始一个新项目(显然是在PostgreSQL上),请将自己保存在ActiveRecord的头痛中并与Sequel一起使用。

 class Post < Sequel::Model set_primary_key [:category, :title] end