数组的未定义方法`serializable_hash'

时间:2011-07-29 05:08:07

标签: ruby-on-rails serialization activerecord mongodb mongoid

我使用mongoid作为我的orm,我在结果集上调用to_json。初始实现工作正常,除了所有内容都是动态加载的事实(而不是预先加载)

以下简化的架构和代码:

Answer has_many likers 

all_answers=Answer.includes(:likers).all.map{|a| a}
all_answer.to_json(:only=>[:text],:include => {:likers=>{:only=>[:_id,:nickname]}})

我开始使用这个伟大的宝石(mongoid_eager_loading),效果很好。但是,当我在结果集上调用to_json时

all_answers=Answer.includes(:user, :question,:likers,:comments).all.map{|a| a}
all_answer.to_json(:only=>[:text],:include => {:likers=>{:only=>[:_id,:nickname]}})

我会收到此错误:

undefined method `serializable_hash' for #<Array:0x00000105b3d020>

只有当我尝试包含数组时才会出现此错误:答案has_many likers。

我怀疑单个对象中包含的数组没有serializable_hash方法。

我该如何解决这个问题?任何想法将不胜感激!

1 个答案:

答案 0 :(得分:0)

看看Miso Engineering的这篇文章:

http://engineering.gomiso.com/2011/05/16/if-youre-using-to_json-youre-doing-it-wrong/

如果您将模型作为JSON推出,那么RABL gem(https://github.com/nesquena/rabl)值得一看。