(rails_admin 3) 不支持的字段数据类型:timestamptz

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

当 rails_admin 尝试访问映射到字段类型为“

timestamp with time zone
”的 PostgreSQL 表的模型时出现此错误,示例:http://localhost:3000/client

错误信息:

我在控制台中收到以下错误:

Unsupported field datatype: timestamptz

错误回溯:

rails_admin (3.1.2) lib/rails_admin/config/fields/types.rb:14:in `block in load'
rails_admin (3.1.2) lib/rails_admin/config/fields/types.rb:14:in `fetch'
rails_admin (3.1.2) lib/rails_admin/config/fields/types.rb:14:in `load'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:17:in `block in <module:Fields>'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:57:in `block (2 levels) in factory'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:57:in `each'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:57:in `detect'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:57:in `block in factory'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:52:in `each'
rails_admin (3.1.2) lib/rails_admin/config/fields.rb:52:in `factory'
rails_admin (3.1.2) lib/rails_admin/config/has_fields.rb:135:in `_fields'
rails_admin (3.1.2) lib/rails_admin/config/has_fields.rb:138:in `_fields'
rails_admin (3.1.2) lib/rails_admin/config/has_fields.rb:109:in `all_fields'
rails_admin (3.1.2) lib/rails_admin/config/has_fields.rb:84:in `fields'
rails_admin (3.1.2) app/controllers/rails_admin/main_controller.rb:127:in `get_collection'

堆栈:

  • 轨道 7.0.4.3
  • 红宝石 3.1.3
  • gem rails_admin 3.1.2
  • gem pg 1.4.6
  • Postgres 服务器 12.9

上下文:

如果我将字段类型更改为“没有时区的时间戳”,它工作正常,但我需要时区。

我知道这是支持的,因为它适用于 rails_admin 2 和 rails 5。

检查 gem 中的错误,我可以看到类型注册表中没有 :timestamptz 键,只有 :timestamp。

 rails_admin (3.1.2) lib/rails_admin/config/fields/types.rb:14

>> @@registry.keys
=> [:text, :action_text, :string, :enum, :active_record_enum, :file_upload, :active_storage, :belongs_to_association, :boolean, :bson_object_id, :composite_keys_belongs_to_association, :datetime, :date, :numeric, :decimal, :dragonfly, :paperclip, :carrierwave, :multiple_file_upload, :multiple_active_storage, :multiple_carrierwave, :float, :has_many_association, :has_and_belongs_to_many_association, :has_one_association, :integer, :password, :polymorphic_association, :hidden, :serialized, :shrine, :time, :timestamp, :color, :simple_mde, :ck_editor, :code_mirror, :wysihtml5, :froala, :json, :jsonb, :inet, :uuid, :citext]

PostgresSQL 表定义:

CREATE TABLE public.clients (
    id integer NOT NULL,
    name character varying(100) NOT NULL,
    created_at timestamp with time zone DEFAULT now(),
    updated_at timestamp with time zone,
    slug character varying(100) NOT NULL
);

模型定义:

app/models/client.rb

class Client < ApplicationRecord
end
ruby-on-rails postgresql rails-admin
1个回答
0
投票

Rails Admin gem 似乎无法处理“clients”表中“updated_at”字段的 PostgreSQL 数据类型“timestamp with time zone”。此问题可能是由于 Rails Admin gem 的字段类型注册表中的限制所致。

正如您所提到的,将字段类型更改为“没有时区的时间戳”似乎已经解决了这个问题。但是,如果您需要使用时区,此解决方法可能不适合您的应用程序。

要解决此问题,您可能需要修改 Rails Admin gem 以支持“带时区的时间戳”数据类型,或者考虑使用支持此数据类型的其他 gem。您可能还想检查解决此问题的 Rails Admin gem 的任何更新或补丁。

或者,您可以考虑在 Rails Admin 中创建自定义字段类型来处理特定应用程序的“带时区的时间戳”数据类型。

总的来说,重要的是要彻底测试您的应用程序,以确保它使用适合您的特定用例的适当数据类型正常运行。

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