我是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
值。