2011-03-21 93 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]) %> 
相關問題