rails中的多列主键

我正在尝试将桌面应用程序迁移到rails(也处理相当老式的现有数据库)。 问题是我在一列中没有唯一的ID,但它是表的三列,保证了记录的唯一性。

鉴于我有三个表:

authors author_name, author_letter, author_nr1, author_nr2 ... titles titel_nr, titel_name, ... author_titles titel_nr, author_letter, author_nr1, author_nr2 

作者的“主键”包括author_letter,author_nr1,author_nr2 here。

那么我需要一种多列主键来使rails关联工作吗? 或者我在这方向走错了方向?

不可以。主键是(与rails默认)Record的ID。

此外,您可以设置唯一的密钥

  add_index :users, [:merchant_id, :email], unique: true add_index :users, [:merchant_id, :login], unique: true 

这会影响您的数据库。 要捕获Rails中的唯一性,您需要写入您的模型:

  validates_uniqueness_of :email, scope: :merchant_id validates_uniqueness_of :login, scope: :merchant_id 

存在一个名为composite_primary_keys的gem,它允许使用多个列构建主键。

所以,是的,您可以使用多列主键。

但是,如果您能够更改数据模型(并非总是如此),我建议为每个表添加一个列ID,因为这将使您的生活更轻松(并且性能更高)。

[编辑]

使用composite_primary_keys的类定义将如下所示

 class Author set_primary_keys :author_letter, :author_nr1, :author_nr2 has_many :titles, :through => :author_title end class Title set_primary_key :title_nr end class AuthorTitle belongs_to :title, :foreign_key => :title_nr belongs_to :authori, :foreign_key => [:author_letter, :author_nr1, :author_nr2] end 

希望这可以帮助。

正如许多人所说的那样:“如果你打Rails,它就会反击”。 真的试着避免这种情况,如果你没有干净的数据模型,那就是使用rails很痛苦。