您在帖子中引用的 guide 是指 Rails 的 v6.1.4
。查看该页面右上角的版本信息。
v5.0 的指南没有明确指定支持的参数类型。并查看您正在使用的 Rails 版本的 source code(见下文),即 5.0.7.2
def serialize_argument(argument)
case argument
when *TYPE_WHITELIST
argument
when GlobalID::Identification
convert_to_global_id_hash(argument)
when Array
argument.map { |arg| serialize_argument(arg) }
when ActiveSupport::HashWithIndifferentAccess
result = serialize_hash(argument)
result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true)
result
when Hash
symbol_keys = argument.each_key.grep(Symbol).map(&:to_s)
result = serialize_hash(argument)
result[SYMBOL_KEYS_KEY] = symbol_keys
result
else
raise SerializationError.new("Unsupported argument type: #{argument.class.name}")
end
end
您传递的参数类型 Class
和 Date
不受支持,因此您得到 SerializationError
。
注意:每当提到 API 文档或指南时,我建议您查看它们以了解您正在使用的特定版本的 Rails。
,
Rails 5.0 不支持 Class/Date/DateTime/Time 等。所以我需要使用 String
形式的数据传递给作业。
作为参考,这里是反序列化的方法(简化)
def serialize_argument(argument)
case argument
when *[ NilClass,String,Integer,Float,BigDecimal,TrueClass,FalseClass ]
argument
when GlobalID::Identification
convert_to_global_id_hash(argument)
when Array
argument.map { |arg| serialize_argument(arg) }
when ActiveSupport::HashWithIndifferentAccess
result = serialize_hash(argument)
result[WITH_INDIFFERENT_ACCESS_KEY] = serialize_argument(true)
result
when Hash
symbol_keys = argument.each_key.grep(Symbol).map(&:to_s)
result = serialize_hash(argument)
result[SYMBOL_KEYS_KEY] = symbol_keys
result
else
raise SerializationError.new("Unsupported argument type: #{argument.class.name}")
end
end
本文链接:https://www.f2er.com/35455.html