ROR在迁移文件中正确添加索引

时间:2014-12-13 16:44:27

标签: ruby-on-rails rails-migrations

我是rails的新手,我正在尝试创建基于事件的应用。

当数据库最终被记录的事件填充时,我希望能够执行常规搜索并根据其名称,地址或开始日期列出它们。 (我最终将对结果进行地理编码并在Google地图上显示多个事件)

对于用户个人资料页面上的单独目的,我还需要能够根据user_id搜索它们,并按照created_at时间戳的相反顺序列出它们。

我不确定如何在迁移文件中正确添加索引。这是我当前的迁移文件:

class CreateEvents < ActiveRecord::Migration
  def change
    create_table :events do |t|
      t.string :name
      t.string :address
      t.float :latitude
      t.float :longitude
      t.datetime :start_date
      t.datetime :end_date
      t.references :group, index: true
      t.references :user, index: true
      t.integer :privacy
      t.text :content

      t.timestamps null: false
    end
    add_index :events, [:user_id, :created_at]
  end
end

我试着这样做:

add_index :events, [:user_id, :created_at, :address, :start_time]

但收到此错误:

rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:

Index name 'index_events_on_user_id_and_created_at_and_address_and_start_time' on table 'events' is too long; the limit is 62 characters/Users/home/.rvm/gems/ruby-1.9.3-p194@global/gems/activerecord-4.2.0.beta4/lib/active_record/connection_adapters/abstract/schema_statements.rb:884:in `add_index_options'

1 个答案:

答案 0 :(得分:0)

如错误消息详细信息,rails用于创建索引的默认名称太长。您可以通过隐式指定名称来解决此错误,如下所示:

add_index :events, [:user_id, :created_at, :address, :start_time], name: 'index_name'

index_name提供合适的值。