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



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

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

出于用户个人资料页面上的单独目的,我还需要能够根据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'

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

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

想出一个合适的index_name值。

相关内容

  • 没有找到相关文章

最新更新