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很痛苦。