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가 마법을 사용하도록하고 이상하게 무시할 수 있습니다.
당신이 정말로에 할당해야하는 경우 당신은 그런 수행 할 수 있습니다 (ID를 다시 전달하는 방법에 대한 주석 해결하기 위해)
model_object.id = id_variable
model_object.created_at = created_at_variable
model_object.updated_at = updated_at_variable
model_object.save
EDIT1을 : 당신은 레일 REST 모델을 사용하는 경우
을 컨트롤러/: id/action url을 호출하면 해당 정보가 URL에 이미 포함되어 있으므로 ID를 다시 전달할 필요가 없습니다. params[:id]
을 통해 액세스하고 params[:model_name]
을 통해 해시 (레일스 모델을 따름)를 통해 액세스 할 수 있습니다.
당신이 JSON에 있어야 다른 무언가와 ID 을 수행하는 경우는 다시 전달되는 당신은 단순히 id = params[:model_name][:id].delete
을 할 수 있으며, 그 해시에서 ID를 삭제하고 하나의 호출에서 값을 반환합니다. 그것은 이상적은 아니지만 핀치로 일을 끝낼 수 있습니다.
그러나 업데이트는 항상 반환되는 ID가 필요하지만 업데이트되지 않습니다. 제 생각에 그것이 저의 가장 큰 관심사였습니다. 백본에 타임 스탬프를 보내지 않으면 반환되지 않지만 ID를 보내야합니다. 나는 그것이 내가 그렇게 혼란스러워하는 이유라고 생각한다. 레일스가 '나를 보호하는'방법을 알 수 있습니다.하지만이 기회에 왜 이것을 볼 수 있는지 알고 싶습니다. – pedalpete
굉장하고, 당신의 업데이트 @ salt.racer에 감사드립니다. 나는 그 모델에 대한 편안한 업데이트를하고 있지 않았는데, 나는 당신의 코멘트까지는 깨닫지 못했다. 이제 나는 안심하고 갈 수있는 옵션을 가지며 왜이 응답을 얻었는지 이해합니다. – pedalpete
다음과 같은 후속 조치 - 동일한 문제가 발생하여 "최상의"솔루션이 무엇인지 궁금해합니다. 제 경우에는 업데이트시 ID를 삭제하는 중입니다 ... 그러나 다른 값들도 있습니다. 임베디드 애트리뷰트 또는 메쏘드 리턴 (계산 된 라벨과 같은)으로 돌아 왔으므로 업데이트 할 수 없다. 이것을 좀 더 깔끔하게 처리 할 수있는 레일 협약이 있습니까? – MBHNYC