Я использую метод нажатия Ruby в моем seed.rb следующим образом: -
PaymentMode.find_or_create_by(name: "Cash").tap do |pm|
pm.instrument = false
pm.bank_account_allocation = false
pm.save!
end
В schema.rb модель PaymentMode выглядит следующим образом: -
create_table "payment_modes", force: :cascade do |t|
t.string "name"
t.boolean "instrument", null: false
t.boolean "bank_account_allocation"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["name"], name: "index_payment_modes_on_name", unique: true
end
Я хочу, чтобы, если кто-то обновил начальный файл (например, кто-то может обновить pm.bank_account_allocation = true) и затем запустить rake db:seed
, необходимо обновить данные соответствующего payment_mode, поэтому я использую find_or_create_by
Это работало нормально, но послеЯ добавил ограничение null: false в свой PaymentMode (см. Схему), получаю эту ошибку: -
PG::NotNullViolation: ERROR: null value in column "instrument" violates not-null constraint
Могу ли я обойти эту ошибку?Если нет, то есть ли способ поместить данные в мой seed.rb, чтобы, если кто-то обновляет семя, он обновил соответствующий объект ActiveRecord?
PS Я не хочу сохранять столбец с ограничениямивнутри параметров find_or_create_by, подобных этому PaymentMode.find_or_create_by(name: "Cash", instrument: false).tap
, так как это создаст другой объект, если кто-то обновит инструмент: false на инструмент: true