В вашем 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 и вызываете URL-адрес контроллера/:id/action, вам не нужно передавать идентификатор обратно, поскольку эта информация уже встроена в URL-адрес. Доступ к нему можно получить через params[:id]
, а к хешу — через params[:model_name]
(в соответствии с моделью Rails).
Если вы делаете что-то другое и идентификатор должен быть в возвращаемом JSON, вы можете просто выполнить id = params[:model_name][:id].delete
, и это удалит идентификатор из хэша и вернет значение за один вызов. Это не идеально, но может выполнить работу в крайнем случае.
person
salt.racer
schedule
24.02.2012