2

레일 4 애플리케이션에 NG 리소스 게시를 수행 할 때 레일스가 올바른 매개 변수를 추가하지 않고 실제로 '게시'라는 예기치 않은 매개 변수를 추가합니다.레일 4가 AngularJS 리소스 게시물에 예기치 않은 매개 변수를 추가합니다.

내 서비스 :

App.factory('Rule', ['$resource', function ($resource){ 
    return $resource('/json/rules/:id', {id:'@id'}, { 
    create: {method: 'POST'}, 
    update: {method: 'PUT'}, 
    delete: {method: 'DELETE'} 
    }); 
}]); 

레일을 제공

namespace :json, defaults: {format: :json} do 
    resources :rules 
end 

레일 컨트롤러 :

class Json::RulesController < ApplicationController 
    respond_to :json 

    def create 
    rule = Rule.new(rule_params) 
    ap rule 
    rule.save! if rule.valid? 
    respond_with :json, rule 
    end 

    def update 
    rule = Rule.find(params[:id]) 
    rule.update(rule_params) 
    respond_with rule 
    end 

    def rule_params 
    params.require(:rule).permit(:business_id, :raw_value => []) 
    end 
end 

나는 내 응용 프로그램에 게시물이 방법을 수행 할 때

$scope.rule.$update(function(){ 
    $location.path('/businesses/{0}'.format($stateParams['id'])); 
}, SharedMessage.addResponse).finally(function(){ 
    $rootScope.busy = false; 
}); 
,691,363을

Accept:application/json, text/plain, */* 
Accept-Encoding:gzip,deflate 
Accept-Language:en-US,en;q=0.8,pt-BR;q=0.6,pt;q=0.4 
Connection:keep-alive 
Content-Length:142 
Content-Type:application/json;charset=UTF-8 
Cookie:hsfirstvisit=http%3A%2F%2Flocalhost%3A3000%2F%23%2Ftimeline||1402593173474; XSRF-TOKEN=GGNL6suNkGkOUEiUsEPxFE92C0AfCeLsT46GMrAJtoA%3D; __hstc=181257784.ee9ff47c4f98b78ed4d99e2ae1ee5edf.1402593173476.1415037010146.1415207051885.75; __hssrc=1; hubspotutk=ee9ff47c4f98b78ed4d99e2ae1ee5edf; _myapp_session=Uk9LS--914a262148c5784afe30087e8a5f6572fbf7d342 
Host:localhost:3000 
Origin:http://localhost:3000 
Referer:http://localhost:3000/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36 
X-CSRF-TOKEN:GGNL6suNkGkOUEiUsEPxFE92C0AfCeLsT46GMrAJtoA= 
X-Requested-With:XMLHttpRequest 
X-XSRF-TOKEN:GGNL6suNkGkOUEiUsEPxFE92C0AfCeLsT46GMrAJtoA= 
Request Payload:{"raw_value":["from:me"], "business_id":"125", "volume":0} 

레일 응용 프로그램은 다음과 같은 매개 변수를받습니다 : (210)

는 HTTP 포스트 자체는 다음과 같은 데이터를 전송

Parameters: {"raw_value"=>["from:me"], "business_id"=>"125", "volume"=>0, "base"=>{"raw_value"=>["from:me"], "business_id"=>"125", "volume"=>0}} 
문제가 여기에 PARAMS에 객체 '규칙'을 수신하지에 의존

그리고이 이상한 '기본'매개 변수.

조회수가 얼마나 될지 알고 계십니까?

+0

Angular가하는 요청을 공유 할 수 있습니까? – dubadub

+0

http 게시물 자체를 의미합니까? – felipeclopes

+0

예, 웹 검사기에서. – dubadub

답변

1

나는 angularjs을 모르지만 대답하겠습니다.

문제는 여기에 당신이 wrap_parameters 설정을 사용할 수 있기 때문에이 객체 params 객체를 파라미터 '규칙'이 이상한 '기본'PARAM

이상한 base PARAMS를 수신하지에 의존하고있다. config/initializer/wrap_parameters.rb을 확인하십시오. (: 규칙) .permit (: 그것을 사용하지 않으려면 그냥

wrap_parameters false 

Request Payload:{"raw_value":["from:me"], "business_id":"125", "volume":0} 

params.require 보면 확인해야 business_id : RAW_VALUE => [ ])

단지 매개 변수를 적절한 방식으로 보내지 않는다는 의미입니다. 그것은 그것이 적절한 방법으로 params를 전송하므로 어딘가에 angular에서 설정을 확인

Request Payload:{"rule": {"raw_value":["from:me"], "business_id":"125", "volume":0} } 

그래서 rule 즉 무언가에 싸여되어야한다.

+0

기본 매개 변수는 어떻게됩니까? 그것은 규칙 키의 부족을 보상하기 위해 만들었습니까? – felipeclopes

+0

아니요.'config/initializer/wrap_parameters.rb' 설정에있는'include_root_in_json' 옵션 때문이었습니다. 루트 이름은 매개 변수를 보내는 컨트롤러에서 가져옵니다. –

+0

글쎄,하지만 컨트롤러에서 가져온 컨트롤러는 rules_controller입니다. 규칙이나 규칙 대신 기본으로 포장하는 이유는 무엇입니까? – felipeclopes

관련 문제