В вашем JSON нет ничего плохого. Вопрос в безопасности. Rails по умолчанию защищает определенные атрибуты от создания или обновления из гигантского хеша. Это то, к чему относится ошибка, когда используется термин «массовое назначение».
JSON, который вы разместили:
Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}
содержит поля id
, created_at
и updated_at
. Когда этот JSON передается в действие и хэш используется в 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 (чтобы ответить на комментарий о возврате идентификатора):
Если вы используете REST-модель Rails и вызываете контроллер /: id / action url, вам не нужно передавать ID обратно, так как эта информация уже встроена в URL. Доступ к нему можно получить через params[:id]
, а хеш - через params[:model_name]
(по модели Rails).
Если вы делаете что-то другое, и идентификатор должен находиться в JSON, передаваемом обратно, тогда вы можете просто сделать id = params[:model_name][:id].delete
, и это удалит идентификатор из хеша и вернет значение за один вызов , Это не идеально, но это может сделать работу в крайнем случае.