Rails&主键/唯一性。如何为主键使用多列?

时间:2014-05-16 17:25:31

标签: ruby-on-rails validation primary-key unique

我的问题与此问题完全相同(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中执行此操作?

1 个答案:

答案 0 :(得分:3)

根据前一个问题,正确的是:

add_index :visits, [:room_id, :date], :unique => true

这段代码阻止数据库插入具有相同room_id的{​​{1}}。但就模型验证而言,您还需要添加:

date

这样,validates_uniqueness_of :date, :scope => :room_id 可以并且将在尝试插入之前验证记录。

P.S。:将ActiveRecord列名称更改为更具体的内容,例如datestart_date等。我相信它可能会在将来造成一些潜在问题。