您的 JSON 没有任何问题。问题是安全问题之一。默认情况下,Rails 保护某些属性不会被巨大的哈希创建或更新。这就是错误在使用术语“质量分配”时所指的内容。
您发布的 JSON:
Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}
包含 theid
和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
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 并在一次调用中返回值。这并不理想,但它可以在紧要关头完成工作。