schema.rb 不包含 :add_index 上的 unique

发布于 2024-11-16 18:47:14 字数 693 浏览 8 评论 0原文

我有以下迁移:

class UniqueIndexOnCustomValueKeys < ActiveRecord::Migration
  def self.up
    add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], {:unique=>true,:name=>:cv_unique_composite} 
  end

  def self.down
    remove_index :custom_values, :cv_unique_composite
  end
end

当我运行迁移时,它会在开发数据库中正确创建 UNIQUE 键,但是当我查看 schema.rb 时,:unique 标志不存在。这导致测试数据库没有 UNIQUE 索引。

schema.rb 中的结果行如下所示:

add_index "custom_values", ["customizable_id", "customizable_type", "custom_definition_id"], :name => "cv_unique_composite"

我在这里做错了什么吗?

(Rails 3.0.8,MySql2 gem)

I have the following migration:

class UniqueIndexOnCustomValueKeys < ActiveRecord::Migration
  def self.up
    add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], {:unique=>true,:name=>:cv_unique_composite} 
  end

  def self.down
    remove_index :custom_values, :cv_unique_composite
  end
end

When I run the migration, it creates the UNIQUE key properly in the development database, but when I look at schema.rb, the :unique flag isn't there. This is causing the test database to not have the UNIQUE index.

The resulting line in schema.rb looks like:

add_index "custom_values", ["customizable_id", "customizable_type", "custom_definition_id"], :name => "cv_unique_composite"

Am I doing something wrong here?

(Rails 3.0.8, MySql2 gem)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

杀お生予夺 2024-11-23 18:47:14

自己试试这个:

add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite'

try this for your self.up:

add_index :custom_values, [:customizable_id, :customizable_type, :custom_definition_id], unique: true, name: 'cv_unique_composite'
放赐 2024-11-23 18:47:14

为了适应唯一索引,您需要更改 application.rb 中的 active_record.schema_format:

config.active_record.schema_format = :sql

这将强制测试数据库使用 db/development_struct.sql,它从数据库获取原始 sql 语句而不是 ruby​​ 命令。

这个问题解决了Oracle,但其他数据库特定问题也存在同样的问题(在本例中是MySql唯一索引):为什么我在 Rails schema.db 中没有得到任何索引定义 - "# 无法识别的索引...”

In order to accommodate unique indexes, you need to change the active_record.schema_format in application.rb:

config.active_record.schema_format = :sql

This will force the test database to use db/development_structure.sql which takes raw sql statements from the database instead of ruby commands.

This question addresses Oracle, but the same issue exists for other database specific issues (In this case MySql Unique Indexes): Why am I not getting any index defintions in my Rails schema.db - "# unrecognized index ..."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文