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