Rails 3.2アプリケーションで、JSON経由で虚偽の送信された仮想属性がparamsハッシュの適切な場所にない問題が発生しています。まあ、それは私が期待している場所ではありません。私の期待が正しいかどうかはまだ分かりません。 :) params内のモデルハッシュに仮想属性が移動されない
が、私はこのような標準的な仮想属性のパターンを使用してモデル、持っている:JSONは私のコントローラに送信class Track < ActiveRecord::Base
def rating
# get logic removed for brevity
end
def rating=(value)
# set logic
end
def as_json(options={}) # so my method is in the JSON when I use respond_with/to_json
super(options.merge(methods: [:rating]))
end
end
は次のようになります。
{"id":1,"name":"Icarus - Main Theme 2","rating":2}
を明確にするために、名前とidは仮想ではなく、評価はisです。
レールはその魔法ん後、私は、paramsハッシュにこれで終わる:あなたが見ることができるように、IDと名前は、ネストされたにそれを
{"id"=>"1", "name"=>"Icarus - Main Theme 2", "rating"=>2, "track"=>{"id"=>"1", "name"=>"Icarus - Main Theme 2"}}
します:トラックのハッシュを、しかし、評価はしていません。これは予想される動作ですか?ネストされたハッシュに必要なすべてのパラメータが含まれていないため、コントローラでネストされたハッシュを使用するという(いくらか)標準的な慣行が破られます。
Track.update(params[:id], params[:track]) # :track is missing rating
ありがとうございました!あなたはこのようなネストされたハッシュ内部rating
仮想属性割り当てた場合
提出を行っているフォームを貼り付けることができますが、それはトラックに正しくスコープがないように見えます – MatthewFord