4

我看到了这个...

如何将活动记录结果转换为哈希数组

并想创建一种方法,允许我将任何范围或非范围记录集转换为哈希数组。我将此添加到我的模型中:

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

但是,我收到此错误。

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

任何想法?

4

2 回答 2

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 中它是必需的。

于 2013-06-20T23:34:47.913 回答
2

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

def self.to_hash(collection)
  collection.to_a.map(&:serializable_hash)
end
于 2013-06-20T23:35:07.587 回答