Ruby on Rails:ratyrate gem表已经存在?

时间:2017-05-28 19:52:05

标签: ruby-on-rails ruby-on-rails-5 rails-migrations

我使用的是rails 5,我已经安装了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

1 个答案:

答案 0 :(得分:5)

gem创建的迁移在以后的rails版本中不起作用。在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足够聪明,知道如何回滚此迁移。