【发布时间】:2012-02-19 22:54:41
【问题描述】:
我在 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
感谢您的帮助!
【问题讨论】:
-
你能粘贴提交的表单吗,看起来它的范围不适合跟踪
标签: ruby-on-rails-3 virtual-attribute