2013-11-25 2 views
0

현재 업데이트 목록에 문제가 있습니다. 나는 Rails와 AngularJS를 사용합니다.

JS 측에서 각도 $ 리소스 기능이있는 정렬 가능한 기능을 jQueryUI에 연결하여 정렬 된 텍스트 블록을 읽고 업데이트 (두 번째 단계에서 삭제 및 작성)했습니다.

예 :

  • "- 1가 lorem ipsum의"

  • "- 2 초 위치가 lorem ipsum의"

  • "- 3 번째 위치"AngularJS와의


컨트롤러 내가 가지고 :

정렬 된 요소 후 63,210
function DndCtrl($scope, $resource) { 
    var Feed = $resource('/users/'+ userId +'/test/:id', {id: '@id'}, {'update': {method:"PUT", isArray:true}}); 

    $scope.tests = Feed.query(function() { 
    $scope.updateSortable = { 
    // jQueryUI methods 
    update: function(e, ui) { 
    // trigger after user ends dropping item 
     for (var i=0; i<$scope.tests.length; i++) { 
     var t = $scope.tests[i]; 
     t.position = i+1; 
     t.$update(); 
     } 
    }, 
    placeholder: "t-hightlight", 
    axis: 'y' 
    }; 
    }); 

} // end DnD 

출력 :

PUT http://demo.mytest.dev/users/1/test/1 401 (Unauthorized) 

및 서버 로그에

는 : Rails CSRF Protection + Angular.js: protect_from_forgery makes me to log out on POST HuangYuHei에서 대답하고 그것을 시도 :
warning can't verify csrf 

그래서 나는이 주제에 발견했다. 다음

콘솔 출력 :

GET http://demo.mytest.dev/users/1/test 404 (Not Found) 

그리고 서버 로그에 :

Test Load (1.9ms) SELECT "tests".* FROM "tests" WHERE "tests"."id" = 2 LIMIT 1 
    Unpermitted parameters: id 

내가 직접 레일 콘솔에서 요청을 테스트하고 그것을 잘 항목을 반환.

내가 뭘 잘못하고있어? Rails 설정 부분에 뭔가 빠졌습니까? 또는 각도 부분?

답변

1

레일 컨트롤러 동작에서 strong_params 문제가 발생했습니다.

strong_params은 레일 4에서 새로 도입되었으며 이전 버전의 attr_accessible 모델 속성의 위치를 ​​차지합니다. 이제 컨트롤러에서 params의 필드를 쿼리에 사용할 수 있도록 지정합니다.

그것은 다음과 비슷한 모습이 될 것입니다

respond_with Test.find(params.permit(:id)) 
# or 
render json: Test.find(params.permit(:id)) 
+0

을 오 덕분에 나는 우리가 솔루션에 가까운 것 느낀다! 두 솔루션 모두 시도해 보았고 attr_accessible을 모델에 추가했습니다. "Argument Error (Unknown : id)"로 500 상태에서 오류 출력이 변경됩니다. – user1713964

+0

몇 가지 조사를 한 후에 나는이 beahviour를 가지고있다. 각도가 $ update이고, Rails가 DB에 잘 저장되어있다. 모두 괜찮습니다. 그러나 FrontEnd에서 콘솔은 500 오류를 반환합니다. 업데이트가 제대로 작동하기 때문에 어떻게 표시하지 않을 수 있습니까? – user1713964

+0

이 오류를 생성하는 것은 레일에 의해 주어진 응답이었습니다. 레일즈에서 업데이트 할 때 save()를 수행하고 페이지를 렌더링하면됩니다. :) 당신의 지적에 감사드립니다. – user1713964

관련 문제