2009-06-19 14 views
2

ActiveRecordは、to_jsonメソッドを提供しています。これは、フィールドをfrom:および:exceptを使用してJSON出力からフィルタリングできるようにします。ActiveRecordsからJSONへの配列

現時点では私はJSONとして検索からの配列をフォーマットするには、以下の使用しています:

@customers = Customer.find(:all) 
... 
format.js { render :json => @customers} 

どのように私は、配列内のオブジェクトで出力するフィールドを選択することができるであろうか?ショートカットがありますか、これを手作業で行う必要がありますか?あなたはActionController ::基本クラスにのぞき見した場合、あなたはそれを持っているんだので、それは、(余分なオプションを使用しない)すぐにあなたのコレクションにto_jsonを呼び出すこと

乾杯、 アダム

答えて

2

モデルの変更をグローバルに適用する場合は、モデルクラスのto_jsonメソッドを上書きできます。私はあなたがあなた自身に答えを考える

def to_json(options) 
    hash = Serializer.new(self, options).serializable_record.reject {|key, value| value.nil? } 
    hash = { self.class.model_name => hash } if include_root_in_json 
    ActiveSupport::JSON.encode(hash) 
    end 
1

が表示されますすでに準備されています。あなたのアクションであなたはJSONにレンダリングされていない属性を使用していないのであれば、あなたが必要なものだけを選択するように

@customers = Customer.find(:all, :select => ["id", ...]) 

であなたの検索を置き換えることができます。

2

たとえば、あなたがあなたのモデルクラスでこれと

def to_json(options) 
    hash = Serializer.new(self, options).serializable_record 
    hash = { self.class.model_name => hash } if include_root_in_json 
    ActiveSupport::JSON.encode(hash) 
    end 

to_jsonを元ActiveRecordのメソッドを上書きする可能性がレンダリングされたJSONからNULL値を除外するために質問。 Rails 2.3.xでは、以下を使用できます:

@customers = Customer.all #Shortcut for to Customer.find(:all) 
respond_to do |format| 
    format.js { render :json => @customers.to_json(:only=>[:column_one, :column_two]} 
end 
関連する問題