win*_*yer 1 activerecord ruby-on-rails ruby-on-rails-5
我使用此命令创建了一个脚手架(Rails 5.2.1.1):
rails g scaffold EmailAddress value:string:index
email_address_type:references
email_addressable:references{polymorphic}
position:integer
Run Code Online (Sandbox Code Playgroud)
这导致了这个迁移文件:
class CreateEmailAddresses < ActiveRecord::Migration[5.2]
def change
create_table :email_addresses do |t|
t.string :value
t.references :email_address_type, foreign_key: true
t.references :email_addressable, polymorphic: true
t.integer :position
t.timestamps
end
add_index :email_addresses, :value
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会引发以下错误rails db:migrate:
Caused by:
ArgumentError: Index name
'index_email_addresses_on_email_addressable_type_and_email_addressa...'
on table 'email_addresses' is too long; the limit is 62 characters
Run Code Online (Sandbox Code Playgroud)
我了解问题和错误。我想知道最好的解决方案是什么,因为索引不是add_index由某些背景魔法明确设置的。
正如 Wintermeyer 所说的是一种解决方案,还有另一种方法至少我觉得使用起来更顺畅。
t.references :email_address_type, foreign_key: true,
index: { name: "addressable_index" }
Run Code Online (Sandbox Code Playgroud)
add_index通过这种方式,您不会在迁移中获得大量行。如果您进行大型迁移并且需要快速找到特定索引,这会有所帮助。这只是我个人的意见,Wintermeyer 解决方案也是一个可行的解决方案!
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |