2012-01-20 4 views
1

to_jsonを上書きしています。to_jsonのキーを置き換えるにはどうしたらいいですか?

{ "integer1": "23", "integer2": "2", "integer3": "4", ... } 

は私が返すようにto_jsonをしたい:私は私のモデルにto_jsonを呼び出すと

は、私は次の取得

{ "Something": "23", "SomethingElse": "2", "AnotherThing": "4", ... } 

私はキーとそのマッピングを含む配列を持っています

"integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing", .... 

どうすればいいですか?

+0

あなたがいるのRailsのバージョンは何を使用して? –

+0

最後は配列ではなく、ハッシュですよね? – Phrogz

+0

@Phrogz、実際はその情報を含むオブジェクトです。 – c0deNinja

答えて

4
  1. あなたmodel instance into a hash
  2. はあなたが望むものにハッシュを変換する変換:

    h1 = { "integer1" => "23", "integer2" => "2", "integer3" => "4" } 
    h2 = { "integer1" => "Something", "integer2" => "SomethingElse", "integer3" => "AnotherThing" } 
    desired = Hash[ h1.map{ |k,v| [ h2[k], v ] } ] 
    
  3. はそこからあなたのJSONを取得:

    json = desired.to_json 
    
+0

ありがとう、ただ実装しました! – c0deNinja

+2

ハッシュ[h2.values.zip(h1.values)]やハッシュ[h2.values_at(* h1.keys).zip(h1.values)]を実行すると、ハッシュエントリは異なる順序で挿入されます。 –

2

私は、オブジェクトの「JSONビュー」を作成するためにdraperまたは同様のデコレータパターンソリューションを使用することを強く主張します。

def as_json(options = {})を定義し、モデルのJSON表現として使用するデータのハッシュを返すモデルのデコレータがあります。これはモデルとの分離を行い、データの内部表現とは別にモデルの「データビュー」を簡単に変更することができます。

関連する問題