Mit Ihrem JSON ist alles in Ordnung. Das Problem ist eine Frage der Sicherheit. Rails schützt bestimmte Attribute standardmäßig davor, dass sie von einem riesigen Hash erstellt oder aktualisiert werden. Das ist es, worauf sich der Fehler bezieht, wenn er den Begriff "Massenzuweisung" verwendet.
Das von Ihnen gepostete JSON:
Parameters: {"id"=>1, "updated_at"=>"2011-04-21T16:41:02Z"}, "created_at"=>"2012-02-23T21:01:02Z", "action"=>"test update"}
enthält die id
die created_at
und die updated_at
Felder. Wenn dieses JSON an die Aktion übergeben wird und der Hash in einer model_object.update_attributes(hash_fields)
erhalten Sie diese Fehlermeldung. Um diesen Fehler zu vermeiden, können Sie die Felder aus dem Hash löschen und sie später zuweisen, oder idealerweise ActiveRecord für sich arbeiten lassen und sie einfach ignorieren.
Wenn Sie sie wirklich zuordnen müssen, können Sie das auf diese Weise tun:
model_object.id = id_variable
model_object.created_at = created_at_variable
model_object.updated_at = updated_at_variable
model_object.save
EDIT1 (um auf die Bemerkung zur Rückgabe der ID einzugehen):
Wenn Sie das Rails-REST-Modell verwenden und die URL controller/:id/action aufrufen, müssen Sie die ID nicht zurückgeben, da diese Information bereits in der URL enthalten ist. Auf sie kann zugegriffen werden über params[:id]
und der Hash über params[:model_name]
(in Anlehnung an das Rails-Modell).
Wenn Sie etwas anderes tun und die ID muss in dem zurückgegebenen JSON sein, dann können Sie einfach id = params[:model_name][:id].delete
und das löscht die ID aus dem Hash und gibt den Wert in einem Aufruf zurück. Es ist nicht ideal, aber es kann die Arbeit in einer Prise zu erledigen.