Я пытаюсь установить логическое значение на основе значения другого поля.
Однако на выходе консоли выдается ненулевое нарушение:
Gin Create (124.6ms) INSERT INTO "gins" ("gin_name", "snippet", "description", "abv", "created_at", "updated_at", "slug") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id" [["gin_name", "Seedlip"], ["snippet", "Alcohol free gin"], ["description", "Seedlip have inspired alcohol free gin"], ["abv", 0.0], ["created_at", "2019-02-01 09:21:30.080931"], ["updated_at", "2019-02-01 09:21:30.080931"], ["slug", "seedlip"]]
(0.3ms) ROLLBACK
ActiveRecord::NotNullViolation (PG::NotNullViolation: ERROR: null value in column "alcoholic" violates not-null constraint)
DETAIL: Failing row contains (56, Seedlip, Alcohol free gin, Seedlip have inspired alcohol free gin, 0, 2019-02-01 09:21:30.080931, 2019-02-01 09:21:30.080931, null, seedlip, null).
: INSERT INTO "gins" ("gin_name", "snippet", "description", "abv", "created_at", "updated_at", "slug") VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING "id"
таблица джина
create_table "gins", force: :cascade do |t|
t.string "gin_name"
t.string "snippet"
t.text "description"
t.float "abv"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "distillery_id"
t.string "slug"
t.boolean "alcoholic"
модель gin.rb
class Gin < ApplicationRecord
before_create :is_alcoholic
has_one :distillery
has_many :botanicals_gin
has_many :botanicals, through: :botanicals_gin
validates :gin_name, :snippet, :description, presence: true
validates :gin_name, uniqueness: true
def is_alcoholic
if abv > 0.1
alcoholic = true
end
end
Я пробовал несколько различных обратных вызовов перед сохранением (я понимаю, это будет запускаться is_alcoholic
на новоми обновленные записи) и before_validation (не уверен, что это применимо, так как у меня нет проверки в модели для alcoholic
.
Из консоли у меня нет четкого понимания, является ли эта функциядаже пытаясь запустить.
Я пропускаю что-то базовое?
Обновление Благодаря ответам ниже я получил следующее, которое работает для обоих условий:
def is_alcoholic
if abv == 0.0
self.alcoholic = false
else
self.alcoholic = true
end
end
Я смоделировал столбец, так как хочу использовать его в качестве фильтра при поиске.