【发布时间】:2018-07-26 09:43:39
【问题描述】:
我有以下迁移
class CreateBooking < ActiveRecord::Migration[5.1]
def change
create_table :bookings do |t|
t.integer :day_period, default: 0
t.references :service, foreign_key: true, unique: true, dependent: :destroy, index: true
end
end
end
它会生成以下架构:
create_table "bookings", force: :cascade do |t|
t.integer "day_period", default: 0
t.bigint "service_id"
t.index ["service_id"], name: "index_bookings_on_service_id"
end
当我运行运行 consistency_fail 测试的守卫失败时:
There are calls to has_one that aren't backed by unique indexes.
----------------------------------------------------------------
Model Table Columns
----------------------------------------------------------------
Service bookings (service_id)
----------------------------------------------------------------
现在我最初没有unique: true,但我回滚并添加它,仍然是同样的问题,再次,没有index: true,所以我回滚并添加它仍然是同样的问题。
我认为这是因为架构中的service_id 上没有unique: true,但我不知道,也找不到关于我的具体问题的任何信息。
考虑到当前的迁移,是什么导致了这个问题,我在做什么导致这个问题以及我可以做些什么来阻止这个问题?
【问题讨论】:
-
你在互联网上的什么地方读到你可以像
t.references unique: true这样传递这个参数?唯一性是索引的属性,而不是引用本身。例如,您可以像t.add_index那样传递参数:api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/… -
@TomLord 老实说,我不知道,而且我的 rails-fu 还没有那么出色。
标签: ruby activerecord rails-migrations ruby-on-rails-5.1