Ruby 在 Rails 上:比率 gem table 已经存在?
Ruby on Rails: ratyrate gem table already exists?
我正在使用 rails 5,我已经安装了 gem 并尝试 运行 迁移,但我收到此错误:
Index name 'index_rates_on_rater_id' on table 'rates' already exists
有谁知道为什么会这样?这是一个新站点,刚刚开始添加设计 gem。
这是执行时无法完成的迁移文件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
gem 创建的迁移在更高版本的 rails 中不起作用。在 Rails 5 中,当您使用 belongs_to
和 references
宏时,它们会默认创建索引和外键。
你真正需要的是:
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
您不需要 up
和 down
,因为 Rails 足够聪明,知道如何回滚此迁移。
我正在使用 rails 5,我已经安装了 gem 并尝试 运行 迁移,但我收到此错误:
Index name 'index_rates_on_rater_id' on table 'rates' already exists
有谁知道为什么会这样?这是一个新站点,刚刚开始添加设计 gem。
这是执行时无法完成的迁移文件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
gem 创建的迁移在更高版本的 rails 中不起作用。在 Rails 5 中,当您使用 belongs_to
和 references
宏时,它们会默认创建索引和外键。
你真正需要的是:
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
您不需要 up
和 down
,因为 Rails 足够聪明,知道如何回滚此迁移。