gpt4 book ai didi

ruby-on-rails - rails - 为枚举字段应用默认值

转载 作者:行者123 更新时间:2023-12-04 13:18:54 24 4
gpt4 key购买 nike

我想为我的 enum 字段设置一个默认值,以防止它为零。我做了以下事情:

# db/schema.rb
create_table "templates", force: :cascade do |t|
t.integer "status"
end

# app/models/template.rb
class Template < ActiveRecord::Base
STATUSES = [:draft, :published]
enum status: STATUSES
after_initialize :init

def init
self.status ||= STATUSES.index(:draft)
end
end

我在我的本地环境中得到了预期的结果。但并不完全在heroku中。我需要它是默认值 draft将状态更新为 nil 后,但在这种情况下它变成 nil然而 published范围仍包括更新的行。
$ heroku run rails console

> Template.published.pluck :id
=> [1, 2]

> Template.find(1).update(status:nil)
Template Load (4.4ms) SELECT "templates".* FROM "templates" WHERE "templates"."id" = $1 LIMIT 1 [["id", 1]]
Template Load (4.4ms) SELECT "templates".* FROM "templates" WHERE "templates"."id" = $1 LIMIT 1 [["id", 1]]
(1.7ms) BEGIN
(1.7ms) BEGIN
(1.1ms) COMMIT
(1.1ms) COMMIT
=> true

> Template.find(1).status
=> nil

> Template.published.pluck :id
=> [1, 2]

这是使用枚举的正确用例吗?我错过了我的 heroku 环境有什么特殊之处吗?

最佳答案

您可以从数据库声明中设置默认值。

create_table :templates do |t|
t.column :status, :integer, default: 0
end

然后,映射关系如下
class Template < ActiveRecord::Base
enum status: { draft: 0, published: 1 }
end

关于ruby-on-rails - rails - 为枚举字段应用默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35112115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com