2017-05-28 87 views
0

我使用的軌道5,我已經安裝了寶石,並試圖運行遷移,但我得到這個錯誤:Ruby on Rails:ratyrate gem表已經存在?

Index name 'index_rates_on_rater_id' on table 'rates' already exists

有誰知道爲什麼會存在?這是一個新的網站,剛剛開始添加設計寶石。

這是遷移文件,不會在執行完成rails db:migrate

class CreateRates < ActiveRecord::Migration[5.1] 

    def self.up 
     create_table :rates do |t| 
     t.belongs_to :rater 
     t.belongs_to :rateable, :polymorphic => true 
     t.float :stars, :null => false 
     t.string :dimension 
     t.timestamps 
     end 

     add_index :rates, :rater_id 
     add_index :rates, [:rateable_id, :rateable_type] 
    end 

    def self.down 
     drop_table :rates 
    end 

end 
+0

如果您回滾並評論'add_index:rates,:rater_id' out並再次運行遷移,它是否有效? – Niklas

+0

你的db/schema.rb文件是什麼樣子的? – ddonche

回答

1

寶石創建遷移不會在軌的更高版本的工作。在Rails 5中,當您使用belongs_toreferences宏時,它們默認會創建索引和外鍵。

您真正需要的是這樣的:

class CreateRates < ActiveRecord::Migration[5.1] 
    def self.change 
    create_table :rates do |t| 
     t.belongs_to :rater 
     t.belongs_to :rateable, :polymorphic: true 
     t.float :stars, null: false 
     t.string :dimension 
     t.timestamps 
    end 
    add_index :rates, [:rateable_id, :rateable_type] 
    end 
end 

你不需要updown因爲Rails是足夠聰明,知道如何回滾此遷移。

+0

我真的很懷疑這個特殊的寶石是否值得它根據github上的活動量。 – max

+0

這工作,謝謝!你認爲我可以用什麼替代這個寶石,@max – hellomello

+0

不知道,我猜這個功能並不是全部都很難單獨複製。 – max