gpt4 book ai didi

ruby-on-rails - "has_many through"关联在使用自定义 ActiveRecord::Type(二进制)列时不起作用

转载 作者:太空宇宙 更新时间:2023-11-03 16:13:16 25 4
gpt4 key购买 nike

我创建了以下 ActiveRecord 类型,虽然 has_many 关联工作良好,但 has_many :through 不:

# app/types/uuid_type.rb
class UuidType < ActiveRecord::Type::Binary
def serialize(value)
super(cast_to_uuid(value)&.raw)
end

def deserialize(value)
cast_to_uuid(super(value)).to_s
end

def cast_value(value)
cast_to_uuid(value).to_s
end

private

def cast_to_uuid(value)
return if value.nil?

case value.size
when 16 then UUIDTools::UUID.parse_raw(value) # From `uuidtools` gem
when 36 then UUIDTools::UUID.parse(value) # From `uuidtools` gem
end
end
end

# app/models/token.rb
class Token < ActiveRecord::Base
attribute :id, UuidType.new, default: SecureRandom.uuid

has_many :token_users
has_many :users, through: :token_users
end

(我也写了一个完整的 code to replicate the issue )。


has_many 生成的 SQL where 子句类似于以下内容并且可以完美运行:

WHERE column = x'4e254953bcdb4793a485ac04131565a7'

虽然为 has_many :through 生成的那个不起作用:

WHERE column = '4e254953-bcdb-4793-a485-ac04131565a7'

它不会返回任何错误,但也不会返回任何结果

问题是第二个 (has_many :through) 不包含 x 前缀,也没有删除连字符(如果我手动这样做,它解决了这个问题)。

我能够用 MySQLSQlite 以及 Rails 56 重现这个问题。

为什么 has_many :through 关系不会为二进制类型生成相同的 SQL?您如何才能让它发挥作用?

最佳答案

事实证明这是一个 Rails 错误。

我已经提交了 an issue在官方 repo 协议(protocol)上,他们已经修复了它:

👉 https://github.com/rails/rails/pull/36847

关于ruby-on-rails - "has_many through"关联在使用自定义 ActiveRecord::Type(二进制)列时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55446330/

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