Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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 如何在rails中的两列上实现唯一索引_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails 如何在rails中的两列上实现唯一索引

Ruby on rails 如何在rails中的两列上实现唯一索引,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我有一个表,我试图在两列上添加一个唯一的索引。这些列也被编入索引。所以我的问题是,我是否可以删除只针对一列的索引,或者我是否必须使用所有三个索引: add_index "subscriptions", ["user_id"] add_index "subscriptions", ["content_id"] add_index "subscriptions", ["user_id"], ["content_id"], :unique => true 作为旁注:如果您使用的是MySQL,那

我有一个表,我试图在两列上添加一个唯一的索引。这些列也被编入索引。所以我的问题是,我是否可以删除只针对一列的索引,或者我是否必须使用所有三个索引:

add_index "subscriptions", ["user_id"]
add_index "subscriptions", ["content_id"]
add_index "subscriptions", ["user_id"], ["content_id"], :unique => true

作为旁注:如果您使用的是MySQL,那么在单独的索引中使用
id
content\u id
是没有意义的,如果您同时拥有两列的唯一索引。这可能也适用于其他DBs。。。与您预期的相反,它将对性能产生负面影响(尤其是插入/更新)。还有其他语法:add_index:subscriptions,[:user_id,:content_id],:unique=>true add_index:subscriptions,%w(user_id content_id),:unique=>true它们是一样的,只是用于指定列的不同语法。@FrançoisBeausoleil
%w(用户id内容id)
在ruby中只是创建了一个字符串数组,这对rails来说并不特殊。您可以对仍在创建字符串数组的
“user\u id content\u id”.split
执行相同的操作。我相信您知道这一点,这条评论只是为了让其他读者不会错误地将其与rails联系起来:)在创建表时,这条评论的语法是什么?我用了这个后有奇怪的问题。无法使用rake db:migrate运行任何新迁移。只能使用版本号rake db:migrate:up version=20180411062714一次运行一个文件的迁移。我已经有了表中的数据,我在两列上做了唯一的true。@Françoisbausoleil好吧,实际上它们不是一回事,
%w(user\u id content\u id)
是一个字符串数组。这与
['user\u id','content\u id']
相同。符号数组的不同表示法是
%i(用户id内容id)
,或者正如OP编写的
[:用户id,:内容id]
add_index :subscriptions, [:user_id, :content_id], unique: true