class RemoveClIEntFromSalesteam < ActiveRecord::Migration change_table :sales_teams do |t| t.remove :clIEnt_ID endend
这是我得到的错误:
rake db:migrate-- change_table(:sales_teams)rake aborted!An error has occurred,this and all later migrations canceled:Index name 'temp_index_altered_sales_teams_on_clIEnt_priority_and_personal_priority' on table 'altered_sales_teams' is too long; the limit is 64 charactersTasks: top => db:migrate(See full trace by running task with --trace)
这就是我的schema.rb的样子:
create_table "sales_teams",:force => true do |t| t.string "name" t.integer "firm_ID" t.boolean "clIEnt_priority" t.boolean "personal_priority" t.datetime "created_at",:null => false t.datetime "updated_at",:null => false t.integer "clIEnt_ID" end add_index "sales_teams",["clIEnt_ID"],:name => "index_sales_teams_on_clIEnt_ID" add_index "sales_teams",["clIEnt_priority","personal_priority"],:name => "index_sales_teams_on_clIEnt_priority_and_personal_priority" add_index "sales_teams",["name","firm_ID"],:name => "index_sales_teams_on_name_and_firm_ID"
思考?
谢谢.
解决方法 删除索引,删除列,然后重新添加索引:def up remove_index :sales_teams,:column => [ :clIEnt_priority,:personal_priority ] remove_column :sales_teams,:clIEnt_ID add_index :sales_teams,[ :clIEnt_priority,:personal_priority ]end
我猜你正在使用sqlite,大多数数据库支持真正的ALTER table *** 作来删除列,但sqlite强制你复制表(和索引),删除表,然后将所有内容复制回来; Rails sqlite驱动程序在幕后处理这个问题,但显然不知道标识符长度限制.
如有必要,还可以使用:name选项指定add_index
和remove_index
来指定自己的索引名称.
以上是内存溢出为你收集整理的ruby-on-rails – 索引名称太长 – Rails 3全部内容,希望文章能够帮你解决ruby-on-rails – 索引名称太长 – Rails 3所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)