0

JavaScript 단일 페이지 응용 프로그램이 제공하는 대화 형 기능을 사용하면 클라이언트 측에서 복잡한 중첩 객체를 쉽게 작성할 수 있습니다.자바 스크립트에서 중첩 된 속성 프론트 레일스 응용 프로그램

예를 들어, 필자가 작성한 애플리케이션에서 백본 대상 및 원 모델, 연결하는 경로 및 그 경로를 이동하는 버스가 있습니다. 이 모든 것은 클라이언트 측에서 아주 자연스럽게 이루어집니다.

# Bus toJSON() 
    { 
    seats: 45, 
    route: { 
     summary: "a route summary", 
     origin: { 
     latitude: 45.654634, 
     longitude: 23.5355 
     }, 
     destination: { 
     latitude: 45.654634, 
     longitude: 23.5355 
     } 
    } 
    } 

는 그러나, 나는 레일 모델 accepts_nested_attributes_for 방법은 상황이 아주 추악하게, 내 버스를 지속하는 시간을 때 (사용자가 모든 것을 저장할 준비가) 것을 찾을 수 있습니다. 결국 ActiveRecord를 훌륭하게 재생하려면 데이터를

{ "bus_route_attributes_origin_attributes_latitude" => "45.654634" } 

과 같이 서버에 보내야합니다.

JSON을보다 쉽게 ​​처리 할 수 ​​있도록 서버 측을 어떻게 변경해야합니까?

답변

1

글쎄, 이미 모델을 accepts_nested_attributes으로 설정했다면, 예를 들어. 모델을 업데이트하는, 당신은 단순히 컨트롤러에서 다음을 수행 할 수 있습니다 (난 당신이 이미이 같은 것을 할 가정) : 장소에 함께

def update 
    bus = Bus.find(params[:id] 
    if bus.update_attributes(params[:bus]) 
    flash[:success] = "Success" 
    else 
    flash[:error] = "Error" 
    end 

    redirect_to :back 
end 

를 만 모델의 그 부분을 업데이트합니다 액티브 레코드는 정말 변경 다른 모델에 중첩 된 경우에도 마찬가지입니다.

그러나이 방법은 클라이언트의 전체 bus 개체를 필요로합니다. 하나의 속성 만 업데이트하려는 경우 지금까지 가지고있는 접근 방식에 머물러 있습니다. 나는 이것이 추한 것에 동의하지만, 당신이 완성 된 버스 객체를 단순히 직렬화하고 무엇인가가 변할 때마다 서버로 보내면 Rails는 당신을 위해 무엇이 바뀌 었는지를 알아 낸다.

관련 문제