标题:“Rails 从 7.0.1 升级到 7.1.2 后,枚举‘screen_location’出现未声明的属性类型错误”

问题描述 投票:0回答:1

将 Rails 应用程序从版本 7.0.1 升级到 7.1.2 后,我遇到了名为“screen_location”的枚举属性的问题。错误消息指出,“未声明枚举‘screen_location’的属性类型。枚举必须由数据库列支持或通过属性使用显式类型声明。”值得注意的是,我没有对数据库进行任何更改,这个问题是在升级后出现的。如何在不修改 Rails 7.1.2 中的数据库架构的情况下解决此与枚举相关的错误?

显式属性对我不起作用,我想解决此问题而不对架构进行任何更改

ruby-on-rails enums
1个回答
0
投票

在没有数据库列的情况下,需要使用attribute方法定义一个属性,镜像名称。按照 7.1.2 变更日志中的示例,属性必须指定为类型 :string:

恢复使用具有非列支持属性的枚举的能力。对于缺少相应列的属性,必须显式声明其类型。例如:

class Post < ActiveRecord::Base
  attribute :topic, :string
  enum topic: %i[science tech engineering math]
end

将此方法合并到您的代码中:

attribute :status_ids, :string
attribute :type_ids, :string

enum status_ids: { ... }
enum type_ids: { ... }

需要注意的是,如果没有相应的数据库列,这些属性将不会被持久存储,并且无法供数据库查询访问。

© www.soinside.com 2019 - 2024. All rights reserved.