将Active Record集转换为哈希数组

我看到了这个…

如何将activerecord结果转换为哈希数组

并且想要创建一个允许我将任何作用域或非作用域记录集转换为散列数组的方法。 我把它添加到我的模型中:

def self.to_hash to_a.map(&:serializable_hash) end 

但是,我收到此错误。

 NameError: undefined local variable or method `to_a' for # 

任何的想法?

你可能也需要打电话给all 。 只是to_a可以在范围或现有结果集(例如User.active.to_hash )上正常工作,但不能直接在模型上工作(例如User.to_hash )。 使用all.to_a将适用于这两种方案。

 def self.to_hash all.to_a.map(&:serializable_hash) end 

请注意, all.to_a有点重复,因为all已经返回一个数组,但在Rails 4中它将是必要的。

您正在对类执行操作,而不是对类的实例执行操作。 你可以带走self. 然后在一个实例上调用它,或者在需要将集合传递给类方法的集合上调用它:

 def self.to_hash(collection) collection.to_a.map(&:serializable_hash) end