我的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
为什么会返回此错误?
答案 0 :(得分:3)
问题是你在类(构造函数本身)中定义了@row
而不是实例。您应该将@row
的初始化设置为:
class MySerializer < ActiveModel::Serializer
attributes :hierarchies
def initialize(*args)
super
@rows = []
end
...
然后当你打电话
MySerializer.new
@row
将在实例的上下文