我的 ActiveModel::Serializer
中有以下代码片段。这是一种递归方法,但我需要添加到递归结束时返回的数组。
因此,我将实例变量 @rows
设置为一个空数组 []
。我在方法中推送到该数组,但 Ruby 返回一个 undefined method 'push' for nil:NilClass
。
class MySerializer < ActiveModel::Serializer
attributes :hierarchies
@rows = []
def hierarchies_run(child, user)
hierarchy = UserHierarchy.where(child: child, user_id: user).first
if hierarchy
@rows.push(UserSimpleSerializer.new(User.find(hierarchy.child), :root => false))
hierarchies_run(hierarchy.parent, current.id)
else
@rows.push(UserSimpleSerializer.new(User.find(child), :root => false))
end
end
def hierarchies
hierarchies_run(current.id, current.id)
@rows
end
end
为什么会返回这个错误?
最佳答案
问题是您在类(构造函数本身)而不是实例中定义了 @row
。您应该将 @row
的初始化放入如下内容:
class MySerializer < ActiveModel::Serializer
attributes :hierarchies
def initialize(*args)
super
@rows = []
end
...
然后当你打电话
MySerializer.new
@row
将在实例的上下文中初始化
关于ruby - 方法中无法访问类中的 ActiveModel::Serializer 实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31053872/