将Active Record集转换为哈希数组

时间:2013-06-20 23:00:28

标签: ruby-on-rails

我看到了......

How to convert activerecord results into a array of hashes

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

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

但是,我收到此错误。

NameError: undefined local variable or method `to_a' for #<Class:0x007fb0da2f2708>

有什么想法吗?

2 个答案:

答案 0 :(得分:14)

你可能也需要打电话给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中它是必要的。

答案 1 :(得分:1)

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

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