Rails 3.2アプリで問題が発生し、JSONを介して安らかに送信された仮想属性がparamsハッシュの適切な場所にありません。まあ、それは私が期待する場所ではありません。私の期待が正しいかどうかはまだ分からない。:)
次のような標準の仮想属性パターンを使用するモデルがあります。
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
コントローラに送信されるJSONは次のようになります。
{"id":1,"name":"Icarus - Main Theme 2","rating":2}
明確にするために、名前とIDは仮想ではなく、評価は仮想です。
railsが魔法をかけた後、私はこれをparamsハッシュに入れてしまいます。
{"id"=>"1", "name"=>"Icarus - Main Theme 2", "rating"=>2, "track"=>{"id"=>"1", "name"=>"Icarus - Main Theme 2"}}
ご覧のとおり、idとnameはネストされた:trackハッシュになりますが、評価はそうではありません。これは予想される動作ですか?ネストされたハッシュには必要なすべてのパラメーターが含まれていないため、コントローラーでネストされたハッシュを使用するという(ある程度)標準的な方法に違反します。
Track.update(params[:id], params[:track]) # :track is missing rating
ご協力いただきありがとうございます!