2017-01-11 6 views
0

を送信する前に、Active Recordの関係をレール、私は実際にJSON内のアクティブレコードの関係を送信しますAR関係の配列です。私の問題は、varietalモデルに整数のgrape_idという名前のフィールドが含まれていることです。私は私のWSのためにそれを文字列で送る必要があります。私は、このフィールドのためだけにカスタム変換をJSONにしたくありません。変換フィールドは私のRailsでは4アプリをJSON

自動JSON変換の前にこのフィールドを強制的に文字列にする方法はありますか?可能であれば、私はハッシュの配列を作成し、ドットでARのスタイルを維持する必要はありません:model.fieldもちろん

wine['varietals'].each do |varietal| 
    varietal.grape_id.to_s 
end 

が、これは動作しません。

答えて

1

すべてのRailsモデルには、モデルをJSONにリダイレクトするときに呼び出されるas_jsonメソッドがあります。モデル内でこのメソッドをオーバーライドして、カスタムJSONフォーマットを設定することができます。あなたのケースでは、あなたWineモデルにこのような何かを追加することもできます。

def as_json(opts = {}) 
    json = super(opts) 
    json["grape_id"] = self.grape_id.to_s 
    json 
end 

方法は、あなたがsuperメソッドを呼び出し、jsonそれを変数に設定したときにあなたのデフォルトのモデルのJSONを与え、その後grape_idをstringifiesし、それをJSONに設定し、最後に更新されたJSONを返します。

コントローラがJSONバージョンの単一のWineモデルまたは複数のWineモデルの関連を返すときはいつでも、JSONはこの更新されたメソッドによってフォーマットされ、grape_idは毎回文字列化されます。

+0

それは魅力のように機能します!そして、偉大なMVCはコントローラー内の何かを変更することを避けるためにそこに使用されましたMoskeyOmbusに感謝します。 –

関連する問題