gpt4 book ai didi

ruby-on-rails - 将 Rails 5 枚举与 PG 数组一起使用

转载 作者:行者123 更新时间:2023-12-04 02:25:57 24 4
gpt4 key购买 nike

我正在尝试使用 Rails' enum使用 PostgreSQL 的数组列。

class Post < ActiveRecord::Base
enum tags: { a: 0, b: 1, c: 2 }, array: true
end

但是上面的代码不起作用

有什么方法可以在数组列上使用枚举,例如 arrtibute 配套 array: true ?

编辑

我希望看到以下测试用例通过,但实际上它失败了。
# frozen_string_literal: true

begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end

gemfile(true) do
source "https://rubygems.org"

git_source(:github) { |repo| "https://github.com/#{repo}.git" }

# Activate the gem you are reporting the issue against.
gem "activerecord", "5.1.4"
gem "pg"
end

require "active_record"
require "minitest/autorun"
require "logger"

# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)

# This connection will do for database-independent bug reports.
ActiveRecord::Base.establish_connection(adapter: "postgresql", database: "test")
ActiveRecord::Base.logger = Logger.new(STDOUT)

ActiveRecord::Schema.define do
create_table :products, force: true do |t|
t.integer :type_delivery, default: [], array: true, limit: 8
end
end

class Product < ActiveRecord::Base
enum type_delivery: { a: 1, b: 2, c: 3, d: 5 }, array: true
end

class BugTest < Minitest::Test
def test_array_enum
product = Product.create!(type_delivery: %w[a b c])
assert_equal products.type_delivery, %w[a b c]
end
end

错误是:
/usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.1.4/lib/active_record/enum.rb:172:in `block (2 levels) in enum': undefined method `each_with_index' for true:TrueClass (NoMethodError)
from /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.1.4/lib/active_record/enum.rb:171:in `module_eval'
from /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.1.4/lib/active_record/enum.rb:171:in `block in enum'
from /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.1.4/lib/active_record/enum.rb:154:in `each'
from /usr/local/var/rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/activerecord-5.1.4/lib/active_record/enum.rb:154:in `enum'
from guides/bug_report_templates/active_record_gem.rb:38:in `<class:Product>'
from guides/bug_report_templates/active_record_gem.rb:37:in `<main>'

最佳答案

rails enum api 将属性映射到单个整数列。如果需要,您可以创建自己的位掩码以支持多个属性 ( like is often done with user roles )。

我认为您正在寻找的是 attributes api你甚至可以实现一个自定义的 ActiveRecord::Type 来处理验证。

关于ruby-on-rails - 将 Rails 5 枚举与 PG 数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41659640/

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