Няма нищо лошо във вашия 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
РЕДАКТИРАНЕ1 (за да се отговори на коментара относно връщането на идентификатора):
Ако използвате Rails REST модела и извиквате URL адреса на контролера/:id/action, не е необходимо да предавате идентификатора обратно, тъй като тази информация вече е вградена в URL адреса. Той може да бъде достъпен чрез params[:id]
, а хешът чрез params[:model_name]
(следвайки модела на Rails).
Ако правите нещо различно и идентификаторът трябва да бъде в JSON, който се предава обратно, тогава можете просто да направите id = params[:model_name][:id].delete
и това ще изтрие идентификатора от хеша и ще върне стойността с едно извикване. Не е идеален, но може да свърши работата в краен случай.
person
salt.racer
schedule
24.02.2012