Attempting to upgrade rails dependencies causes serializers to raise error: undefined method `model_name' for Hash:Clas
Attempting to upgrade rails dependencies causes serializers to raise error: undefined method `model_name' for Hash:Clas
几个月前,我已将已建立的 rails 应用程序的 rails 升级到 5.2.4.2,最少 rails 依赖项升级;该应用程序再次稳定下来,因此我们决定将所有 rails 依赖项升级到其最新的兼容版本。
现在,每当控制器对简单(非数据库模型)class 进行 json 渲染调用时,都会显示一条错误消息。
例子
这是序列化程序:
class Api::MessageResponseSerializer < ApplicationSerializer
self.version = 1
attributes :message, :changes
def message
self.object[:message]
end
def changes
self.object[:changes]
end
end
打电话
render :json => { :message => "Not Ready Yet"}, :serializer => Api::MessageResponseSerializer
我收到错误:
NoMethodError:
undefined method `model_name' for Hash:Class
打电话
render :json => [{ :message => "Not Ready Yet"}], :serializer => Api::MessageResponseSerializer
我收到错误:
NoMethodError:
undefined method `model_name' for Array:Class
调用(我知道这个不正确json,这里只是为了举例说明发生同样的错误)
render :json => 1, :serializer => Api::MessageResponseSerializer
我收到错误:
NoMethodError:
undefined method `model_name' for Integer:Class
我可以猴子修补 classes,但我宁愿有一个解决方案允许序列化程序从这些简单的 classes 中获取 model_name。
似乎对 JSON 序列化有一个根密钥的硬性要求,作为 active_model_serializers gem 版本 0.10.10 的一部分引入(自动设置通过捆绑升级);
我将此 gem 降级到版本 0.10.9,序列化问题不再发生...
几个月前,我已将已建立的 rails 应用程序的 rails 升级到 5.2.4.2,最少 rails 依赖项升级;该应用程序再次稳定下来,因此我们决定将所有 rails 依赖项升级到其最新的兼容版本。
现在,每当控制器对简单(非数据库模型)class 进行 json 渲染调用时,都会显示一条错误消息。
例子
这是序列化程序:
class Api::MessageResponseSerializer < ApplicationSerializer
self.version = 1
attributes :message, :changes
def message
self.object[:message]
end
def changes
self.object[:changes]
end
end
打电话
render :json => { :message => "Not Ready Yet"}, :serializer => Api::MessageResponseSerializer
我收到错误:
NoMethodError:
undefined method `model_name' for Hash:Class
打电话
render :json => [{ :message => "Not Ready Yet"}], :serializer => Api::MessageResponseSerializer
我收到错误:
NoMethodError:
undefined method `model_name' for Array:Class
调用(我知道这个不正确json,这里只是为了举例说明发生同样的错误)
render :json => 1, :serializer => Api::MessageResponseSerializer
我收到错误:
NoMethodError:
undefined method `model_name' for Integer:Class
我可以猴子修补 classes,但我宁愿有一个解决方案允许序列化程序从这些简单的 classes 中获取 model_name。
似乎对 JSON 序列化有一个根密钥的硬性要求,作为 active_model_serializers gem 版本 0.10.10 的一部分引入(自动设置通过捆绑升级);
我将此 gem 降级到版本 0.10.9,序列化问题不再发生...