2014-12-13 61 views
1

我剛接觸rails,並試圖創建基於事件的應用程序。ROR在遷移文件中正確添加索引

當數據庫最終被記錄的事件填充時,我希望能夠執行一般搜索並根據其名稱,地址或開始日期列出它們。 (我最終將對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/[email protected]/gems/activerecord-4.2.0.beta4/lib/active_record/connection_adapters/abstract/schema_statements.rb:884:in `add_index_options' 

回答

0

隨着錯誤消息的詳細信息,所使用的默認名稱用於創建索引的軌道太長。您可以通過隱含指定名稱如下解決這個錯誤:

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

來爲index_name一個合適的值。