2010-03-17 92 views
2

我有一個相當大的模型,我只想爲每個記錄檢索一組選定的字段,以保持我構建的JSON字符串很小。Rails - 活動記錄:條件覆蓋:選擇

使用:選擇與查找很好,但我的關鍵目標是使用條件邏輯與關聯的模型。唯一的方法是在命名範圍內使用lamda來實現這一點嗎?我害怕這可能是不必要的,但我想了解是否有一種方法可以:選擇符合條件的工作。

這工作:

@sites = Site.find :all, :select => 'id,foo,bar' 

當我試試這個:

@sites = Site.find :all, :select => 'id,foo,bar', :include => [:relatedmodel], 
        :conditions => ["relatedmodel.type in (?)", params[:filters]] 

條件的作品,但每條記錄包括所有的站點屬性,這讓我的JSON字符串的方式方法太大。

感謝您的指點!

+0

你確定條件是問題嗎?我沒有測試過這個,但是包含看起來更可疑。 – igul222 2010-03-17 20:06:03

+0

我可能完全混淆了,但是爲了向其應用條件,不需要包含相關模型? 如果我這樣做@sites = Site.find:all,:select =>'id,foo,bar',:include =>:relatedmodel 在:select中的3個屬性都是返回的,希望在條件增加之後發生。 – Nick 2010-03-17 20:11:45

回答

2

to_json調用支持:except:only選項以在序列化過程中排除/包含模型字段。上述

@sites.to_json(:only => [:name, :foo, :bar]) 

呼叫序列化對象Site與字段namelocation。上述

@sites.to_json(:only => [:name, :location], 
     :include => { :relatedmodel => { 
          :only => [:description] 
         } 
        } 
     ) 

呼叫序列化對象Site與字段name,和location和包含RelatedModel對象與description字段。

+0

這太好了。我沒有考慮看看to_json電話,因爲我試圖讓主動記錄給我我想要的東西。這工作完美,我的JSON對象現在是一個合理的大小。謝謝! – Nick 2010-03-17 20:25:22