ped*_*ete 2 activerecord ruby-on-rails mass-assignment
我使用rails作为backbone.js站点的服务器端,因此我不断地来回传递rails对象.
我注意到rails返回的错误WARNING: Can't mass-assign protected attributes: id, created_at, updated_at.
当然,我觉得这很奇怪,因为我从来没有把这些字段包括在内.据我所知,我的json看起来很正常
Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}
你的JSON没有任何问题.问题是安全问题.默认情况下,Rails保护某些属性不会从巨型哈希创建或更新.这就是错误在使用术语"质量分配"时所指的错误.
你发布的JSON:
Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}
Run Code Online (Sandbox Code Playgroud)
包含id了created_at和updated_at领域.当此JSON传递给操作并且哈希用于a时,model_object.update_attributes(hash_fields)您将收到此错误.为了避免这种错误,您可以删除哈希的领域,并将其分配后,或理想,让ActiveRecord的工作,它的魔力为你不理会他们.
如果你确实需要分配它们,你可以这样做:
model_object.id = id_variable
model_object.created_at = created_at_variable
model_object.updated_at = updated_at_variable
model_object.save
Run Code Online (Sandbox Code Playgroud)
EDIT1(解决关于传回id的评论):
如果您正在使用Rails REST模型并调用controller /:id/action url,则无需传回ID,因为该信息已嵌入URL中.它可以通过params[:id]和散列通过params[:model_name](在Rails模型之后)访问.
如果你正在做的事情不同,ID 必须是正在传递的JSON回来,那么你可以简单地做id = params[:model_name][:id].delete,并且会从哈希中删除ID和一个调用返回的值.这不是理想的,但它可以在紧要关头完成工作.
| 归档时间: |
|
| 查看次数: |
7239 次 |
| 最近记录: |