如何在mysql2 + rails 3中添加add_index?

时间:2010-12-14 15:35:29

标签: ruby-on-rails-3 mysql2

如何在mysql2中添加索引?

带线: 执行“alter table urli_development.slugs ADD INDEX slugs_sluggable_id(sluggable_id)” 一切正常。

with line:add_index:slugs,:sluggable_id我收到此'无效日期'错误。

问题是我必须添加以下行: add_index(:slugs,[:name,:sluggable_type,:sequence,:scope],:unique => true,:name =>'index_slugs_on_n_s_s_and_s')

以上行不起作用。

我使用Rails 3和mysql2,当我尝试迁移数据库时出现“无效日期”错误。

你是怎么做到的?

4 个答案:

答案 0 :(得分:0)

我也遇到过这个问题而坦率地说还没有完整的“为什么”。但我想分享一些我刚发现的东西。

尝试通过排除“id”字段来创建表格.... add_index将立即运行。所以

class CreateSlugs < ActiverRecord::Migration   
    def self.up
      create_table :slugs,:id=>false do |t|             
         t.string "name"
         t.timestamps
       end
       add_index :indexes,"name",:name=>"slugs_name",:unique=>true
       add_column :slugs,:id,:primary_key
    end
end

或者如果您希望在不同的迁移中执行此操作

class AlterSlugs < ActiveRecord::Migration
  def self
    #add_index :slugs,:name,:unique
    #add_column :slugs,:id,:primary_key        
  end

  def self.down
  end
end

其实非常有趣 - &gt;如果你切换这两行(add_index和add_column)...... 它将无效!

答案 1 :(得分:0)

你遇到了this bug

(我假设你在Windows上) 您可以通过将mysql 5.1安装中的新文件:/// C:/../mysql/lib/opt/libmysql.dll复制到Ruby / bin目录来解决此问题。

然后再次运作!

答案 2 :(得分:0)

您需要将“libmysql.ddl”重新复制并粘贴到ruby的bin文件夹中。

如果您已在计算机或其他来源中安装了Mysql Workbench,请将其存放在该文件夹中。

答案 3 :(得分:0)

尝试使用以前版本的mysql gem而不是mysql2 ...

gem 'mysql', '2.8.1'
# gem 'mysql2'

我在两个不同的项目中遇到过这个错误两次,这在两种情况下都节省了我的一天:) 还值得一提的是,add_index在Ubuntu中使用mysql2完全没有问题。我想这只是一个Windows问题。