所以我在添加索引时使用name
参数成功创建了连接表,但是当我尝试创建新的迁移时,我不确定为什么这不起作用:
class CreateVMailCampaignScheduleHours < ActiveRecord::Migration[5.1]
def change
create_table :v_mail_campaign_schedule_hours do |t|
t.belongs_to :v_mail_campaign_schedule, foreign_key: true
t.string :day
t.time :start_hours
t.time :stop_hours
t.timestamps
end
add_index [:v_mail_campaign_schedule_hours, :v_mail_campaign_schedule_id], name: :v_mail_campaign_schedule_id
end
end
我得到的错误是:
ArgumentError:表'v_mail_campaign_schedule_hours'上的索引名称'index_v_mail_campaign_schedule_hours_on_v_mail_campaign_schedule_id'太长;限制为64个字符
有什么建议?我以为我的add_index
可以做到这一点,但显然不是。
您可以将其更改为以下内容:
class CreateVMailCampaignScheduleHours < ActiveRecord::Migration[5.1]
def change
create_table :v_mail_campaign_schedule_hours do |t|
t.bigint :v_mail_campaign_schedule
t.string :day
t.time :start_hours
t.time :stop_hours
t.timestamps
end
add_index :v_mail_campaign_schedule_hours, :v_mail_campaign_schedule_id, name: :index_campaign_schedule_hours_on_schedule
end
end
您手动创建索引的方法是正确的。但是,t.belongs_to
是t.reference
的别名,它指示创建外键列和相应的索引。所以Rails在到达add_index
之前仍然试图创建索引。使用简单的t.bigint
不会创建索引。