我的问题与此问题完全相同(multicolumn primary keys in rails),但我仍然不理解这100%。
我们说我有模特访问
visits
id
room_id
date
created_at
updated_at
在这种情况下,我希望(room_id,date)成为我的主键'。现在,这篇文章说我不需要更改我的主键,jus添加唯一性验证和东西?
所以我需要
add_index :visits, [:room_id, :date]
或
add_index :visits, [:id, :room_id]
add_index :visits, [:id, :date]
?我是否将每个我想要的列绑在主键上? to:id就像后面的代码一样,或者我只是把我想要的列放到[]中,就像以前的代码一样。
另外,我该如何进行验证?我不想要:room_id或:date是唯一的,只有他们的组合。我如何在Rails中执行此操作?
答案 0 :(得分:3)
根据前一个问题,正确的是:
add_index :visits, [:room_id, :date], :unique => true
这段代码阻止数据库插入具有相同room_id
的{{1}}。但就模型验证而言,您还需要添加:
date
这样,validates_uniqueness_of :date, :scope => :room_id
可以并且将在尝试插入之前验证记录。
P.S。:将ActiveRecord
列名称更改为更具体的内容,例如date
,start_date
等。我相信它可能会在将来造成一些潜在问题。