2

私はかなり大きなモデルを持っており、構築しているJSON文字列を小さく保つために、各レコードの選択されたフィールドのセットのみを取得したいと考えています。

findで:selectを使用するとうまく機能しますが、私の主な目標は、関連付けられたモデルで条件付きロジックを使用することです。名前付きスコープのlamdaでこれを行う唯一の方法は本当にありますか?おそらく不必要にそれを恐れていますが、:selectを条件付きで機能させる方法があるかどうかを理解したいと思います。

これは機能します:

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

私がこれを試すとき:

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

条件は機能しますが、各レコードにはすべてのSite属性が含まれているため、JSON文字列が大きくなりすぎます。

ポインタをありがとう!

4

1 に答える 1

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ます。

于 2010-03-17T20:10:41.807 に答える