0

モデルをjsonとして送信しようとしています。モデルの列の1つにバイナリデータがあります。私が使用した別のモデルの場合

format.json {self.encode64(@resource_type.data).to_json}

成功しましたが、その場合は、タイトルなどではなく、データ列のみが必要でした。1つの列のコンテンツのみをencode64でエンコードする必要がある、複数の列のコンテンツが必要な場合はどうすればよいですか。

次のコードでは、self.encode64メソッドをどこに配置するかわかりません。

format.json { render :json => @resource.to_json(:only => [:id, :title, :data])}

これどうやってするの?

4

2 に答える 2

1

ここにはいくつかのオプションがあります。

base-64形式でdata_base64返されるメソッドをモデルに追加してから、コントローラーで次のオプションを使用できます。data:methodsto_json

@resource.to_json(:only => [ :id, :title ], :methods => :data_base64)

それはdata_base64代わりにJSONのキーを提供しますが、それdataは問題ではないかもしれません。

as_jsonまた、ハッシュを取得してコントローラーのエンコーディングを修正するために使用することもできます。

json = @resource.as_json(:only => [ :id, :title, :data ])
json['resource']['data'] = self.encode64(json['resource']['data'])
render :json => json
于 2012-04-29T21:03:12.777 に答える
0

モデルで使用as_jsonして、このような動作をオーバーライドできます

def as_json(options={})
  { :name_of_resource => { :created_at => created_at, binary => encode64(self.data) } }
end

モデル全体をjsonにシリアル化する方法を指定する必要があります。

乾杯!

于 2012-04-29T21:00:18.793 に答える