2017-05-16 9 views
0

現在、データベースをJsonと別のデータベースと同期しようとしていますが、使用しているキーの問題が発生しています。Ruby Rails - Jsonとモデルをマッピングする

def sync 
    url = '...' # Returns "{ "class": 20, "user": "John" }" 
    uri = URI(url) 
    response = Net::HTTP.get(uri) 
    response_hash = JSON.parse(response) 
... 

は、彼らは応答して、キーワード「クラス」を使用しますが、私は私がすることを許可されていないと思うので、私は「CLS」としての鉱山を持っています。今、新しいユーザーを作成しようとすると、「クラス」を何かにマップできないため、エラーが発生します。

私は新しいキーと一致するようにキーを変更しようとしていましたが、それを動作させることができませんでした。

何らかの理由で効果がないなどの回答を使用する。

pattern = { "class" => "cls" } 

response_hash.inject({}) do |new_hash, (k, v)| 
    key = pattern[k] || k 
    new_hash[key] = v 
    new_hash 
end 

しかし、例のいくつかはHashWithIndifferentAccessを作成したので、彼らはresponse_hash[:class]を行うことができますが、鉱山だけnilを返すのに対し、私は、私がHashを持っているという通知をしました。

この問題の最適な解決策は何でしょうか?理想的には、私は任意のキーを再マップする必要はなく、ちょうど私のデータベースにJsonをスローすることができます。

ありがとうございました。

答えて

2

は、単にこの

response_hash['cls'] = response_hash.delete('class') 

結果は、あなたが直接あなたのデータベースに投げること{ :cls => 20, :user => "John" }なりません。

+0

私はあなたが提案したことを試しましたが、それでも私は同じ結果を与えています。なぜ私は分かりません。 'cls'はそこにはなく、 'class'はまだあります。ああ、しかし、私はresponse_hashから 'HashWithIndifferentAccess'を作成してみました。それを呼び出して、それが動作します。 –

+0

私はそれを編集しました。代わりにそれを試してみてください。 – bitsapien

+0

それはうまくいった、ありがとう。 :) –

関連する問題