我在我的 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}
需要明确的是,name 和 id 不是虚拟的,rating 是。
在 rails 发挥作用之后,我最终在 params 哈希中得到了这个:
{"id"=>"1", "name"=>"Icarus - Main Theme 2", "rating"=>2, "track"=>{"id"=>"1", "name"=>"Icarus - Main Theme 2"}}
如您所见, id 和 name 使其成为嵌套的 :track 哈希,但 rating 没有。这是预期的行为吗?它打破了在控制器中使用嵌套散列的(有点)标准做法,因为嵌套散列不包含我需要的所有参数。
Track.update(params[:id], params[:track]) # :track is missing rating
谢谢你的帮助!