2011-03-21 51 views
4

我试图在我的视图中将一些数据传递给javascript。我只想要数组中对象的某些属性。Rails 3:呈现JSON中的对象数组的某些属性

json gem似乎不支持:only选项。我试图用的ActiveSupport :: JSON

<script> 
test1=<%=raw ActiveSupport::JSON.encode(@sectionDatas.values, :only => [ :left, :width ])%>; 
</script> 

但忽略了:only,并打印整个对象。

然后,我以为我会聪明,从控制器采取render方法:

test2=<%=raw render :json => @sections.as_json(:only => [:left, :width])%> 

,但我得到无:Nilclass错误。

我也试图把这个在我的模型和运行to_json:

include ActiveModel::Serialization::JSON 

def attributes 
    @attributes ||= {'left' => 0, 'width'=>0} 
end 

同样,这忽略了属性的方法和序列化整个对象。

当然,这一定很简单。我错过了什么?

回答

2

当您从db中获取对象select时,您可以过滤掉不需要的列。

Item.find(:all, :select => 'DISTINCT fieldname') 

当然,这不是Rails3的方式。这里说的是:

Model.select(attribute) 

更新

如果你想拥有的对象和JSON的原始数组,但与过滤属性的JSON,你需要重写to_json:

post说明如何做到这一点:

How to override to_json in Rails?

+0

这不会导致额外的数据库查询我已经有的数据吗? – bcoughlan 2011-03-21 22:32:56

+0

我假设你会用我建议的代码替换它。 – s84 2011-03-21 22:35:02

+0

是的,但我也需要完整的对象,没有看到用于额外查询我已有的数据。另外我在.select上找不到任何文档,它是ActiveRecord的一部分吗? – bcoughlan 2011-03-21 22:40:00

3

假设阵列中的对象是实例或包括ActiveModel::Serialization::JSON

test2=<%=raw @sections.to_json(:only => [:left, :width]) %> 
相关问题