Rails 3:在JSON中渲染对象数组的某些属性

时间:2011-03-21 22:19:25

标签: ruby-on-rails ruby ruby-on-rails-3 json

我正在尝试将一些数据传递给我的视图中的javascript。我只想要数组中对象的某些属性。

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])%> 

但我得到Nil:Nilclass错误。

我也尝试将它放在我的模型中并运行to_json:

include ActiveModel::Serialization::JSON

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

同样,这会忽略属性方法并序列化整个对象。

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

2 个答案:

答案 0 :(得分:3)

假设数组中的对象是ActiveRecord::Base或包含ActiveModel::Serialization::JSON的实例:

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

答案 1 :(得分:2)

当您使用select从数据库获取对象时,可以过滤掉不需要的列。

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

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

Model.select(attribute)

更新

如果你想拥有原始的对象数组和json,但是json带有过滤后的属性,你需要覆盖to_json:

post解释了如何执行此操作:

How to override to_json in Rails?