2012-05-20 2 views
0

레일 3.2에서 datatable에 대한 비계를 보유하고 있습니다. 양식을 볼 때 나는 사용자가 변경할 수있는 콤보 박스를 가지고 있으며 값은 편집 모드로 들어가서 거기서 변경하고 저장 버튼을 누르지 않고 즉시 db에 저장됩니다.레일스, 사용자가 콤보 박스 값을 선택할 때 db 값을 변경합니다.

$(document).ready -> 
    $("#change_department").change -> 
    $ajax 
     url: "/Locations/" + # need to set id and new value here 
     success: (data) -> 
     alert data # will need to write a confirmation below the combobox 

내가 대해 내 머리를 scrathing하고있어 어떤 컨트롤러 액션 내가 전화를해야하고 어떻게 데이터를 준비해야입니다 :

나는 커피 스크립트를 사용하여 변경된 값을 캡처 한. 나는 모델의 id와 콤보 박스의 새로운 값을 전달할 새로운 컨트롤러 액션을 생성하고 컨트롤러에서 모델을 찾고 변경된 값을 전달할 것이라고 생각합니다. 이것은 아마도 url에 두 개의 매개 변수가있는 get 메서드 여야합니다 (게시를 사용하여이 작업을 수행하는 방법을 잘 모르겠습니다). 이것은 좋은 일입니까 아니면 누군가가 대안 방법을 제안할까요?

위 coffeescript 코드에서 ID와 변경된 값을 어떻게 얻을 수 있습니까?

감사합니다.

답변

2

1) 데이터를 업데이트 할 때 PUT 요청을 사용하십시오. 레일스의 기본 RESTful 스타일이다. (GETshow, POSTcreate, PUTupdate, DELETE → 파괴). 기본적으로 호출 할 작업은 LocationsController#update (게시 한 코드로 판단)입니다. 새 작업이 필요하지 않습니다.

2) 전체 업데이트 경로를 요소의 data- 속성에 넣습니다. 나는이 경우는 업데이트 작업이 변경되지 않은 상태로 유지 할 수있는 컨트롤러 측에 뭔가 <select id="change_department" name="location[department]" data-uri="/Locations/23"> ... 같은

$("#change_department").change -> 
    url = $(this).data("uri") 
    data = {} 
    data[@name] = @value 
    $.ajax 
    method: "put" 
    url: url 
    data: data 
    success: ... 

이 될 것입니다, 당신은 당신이 "콤보 상자"를 말할 때 "드롭 다운"을 의미 있으리라 믿고있어.

+0

고마워요 - 이제 나는 올바른 길을 걷고 있습니다. – gugguson

+0

@gugguson 도와 드리겠습니다. 주요 요점은 HTML에 최대한 많은 정보를 배치하고 가능한 한 눈에 띄지 않게 처리하는 것입니다. 매우 유용한'data- *'속성은 HTML을 유효하게 유지하면서 기본적으로 그렇게하려고했다. – Flambino

관련 문제