Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 铁路及;主键/唯一性。如何对主键使用多列?_Ruby On Rails_Validation_Primary Key_Unique - Fatal编程技术网

Ruby on rails 铁路及;主键/唯一性。如何对主键使用多列?

Ruby on rails 铁路及;主键/唯一性。如何对主键使用多列?,ruby-on-rails,validation,primary-key,unique,Ruby On Rails,Validation,Primary Key,Unique,我的问题和这个完全一样,但我仍然不能100%理解这个问题 假设我有一次模特参观 visits id room_id date created_at updated_at 在这种情况下,我希望(room_id,date)成为我的“主键”。现在,这篇文章是说我不需要更改我的主键,而是添加唯一性验证之类的东西 那么我需要什么呢 add_index :visits, [:room_id, :date] 或 ??我是要将“主键”中的每一列都与:id绑定在后面的代

我的问题和这个完全一样,但我仍然不能100%理解这个问题

假设我有一次模特参观

visits
    id
    room_id
    date
    created_at
    updated_at
在这种情况下,我希望(room_id,date)成为我的“主键”。现在,这篇文章是说我不需要更改我的主键,而是添加唯一性验证之类的东西

那么我需要什么呢

add_index :visits, [:room_id, :date]

??我是要将“主键”中的每一列都与:id绑定在后面的代码中,还是像前面的代码一样将所需的列放入[]中


另外,如何进行验证?我不希望:room\u id或:date中的任何一个是唯一的,只希望它们的组合。如何在Rails中做到这一点?

根据前面的问题,正确的答案是:

add_index :visits, [:room_id, :date], :unique => true
这段代码防止数据库插入具有相同日期的
房间id
。但在模型验证方面,您还需要添加:

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


注意:将
日期
列名称更改为更具体的名称,如
开始日期
创建日期
,等等。我相信这可能会在将来导致一些潜在问题。

谢谢!还有一个问题。如果有3列需要组成一个主列,该怎么办。a、 b和c。add_index:table[:a,:b,:c],unique:true将添加索引。但是关于下一部分。验证的唯一性:b,范围::a,验证的唯一性:c,范围::a??好吧,这确实是一个奇怪的用例。我不知道,也许一些数组符号
验证了:date,:scope=>[:room\u id,:other\u id]
的唯一性,但我不确定。
validates_uniqueness_of :date,    :scope => :room_id