2012-06-04 1 views
3

중첩 된 ActiveResource 모델 (다른 모델의 네임 스페이스 내에 있음)이 있습니다. 전화를 걸려 고 시도 중 save 제기 :중첩 된 ActiveResource를 저장할 때 어떻게 접두사 매개 변수를 지정할 수 있습니까?

ActiveResource::MissingPrefixParam: client_id prefix_option is missing 

어떻게 필요한 접두사를 제공합니까? 여기

내 클래스의 : 여기

class Foo::Bar < ActiveResource::Base 
    self.site = "http://www.example.com" 
    self.prefix = "/clients/:client_id" 
    self.element_name = "policy" 
    self.collection_name = "policies" 
end 

내 저장 시도의 :

bar = Foo::Bar.new :client_id => 123 
bar.valid? # => true 
bar.client_id # => 123 
bar.save # => ActiveResource::MissingPrefixParam... 

시간과 다시 나는 이것에 대한 해명에 대해 검토 한 결과,하지만 난 단지 같은 명령을 찾을 수 :

When a GET is requested for a nested resource and you don’t provide the prefix_param an ActiveResource::MissingPrefixParam will be raised.

Google 서버의 API 끝점에 액세스하려고합니다. ActionController::RoutingError (No route matches "/clients//policies/" with {:method=>:post}) : 내 응용 프로그램은 서버의 로그가 나에게 말한다 http://www.example.com/clients//policies

에 그 요청을 할 수 있도록 http://www.example.com/clients/[client_id]/policies에서,하지만 난 분명히 client_id 공급에 실패하고있다.

답변

6

그것은 작동합니다 prefix_options 다음과 같이 필요한 client_id prefix_option을 포함하는 해시를 제공합니다.

def prefix_options 
    { :client_id => client_id } 
end 
-1

특정 클라이언트에 대한 새 정책을 만들고 싶다고 가정합니다. 당신이 당신의 정책 세부 정보를 게시되어야하는 경로는해야한다 : 당신이 양식을 사용하는 경우

client_policies_path(@client.id) 

,이 같은 form_for 사용할 수 있습니다 @client@policy#new에 의해 만들어집니다

form_for [@client, @policy] do 

이처럼 PolicyController의 조치 : 당신이 방법을 만드는 경우

def new 
    @client = Client.new(params[:client_id]) 
    @policy = @client.policies.build 
    # ... 
end 
+0

감사하지만 작동하지 않습니다. (나는 그것이 어떻게 작동하는지 알 수 없다. 그러나 나는 그것을 어떻게해서든지 시험해 보았다). 1)'client_policies_path'는 없습니다 (저는'ActiveRecord'가 아닌'ActiveResource'를 사용하고 있습니다. 따라서 경로는 내 루트 파일에 존재하지 않으며 모델에 지정되어 있습니다). 2) 나는 콘솔을 사용하고있는 폼을 사용하지 않고 컨트롤러 속성'@policy'와'@client'를 설정하는 것은 결과에 아무런 영향을 미치지 않습니다. 나는'ActiveResource'를 사용하고 있으며 단지 인스턴스에 대해'save'를 호출합니다. 문제의 정책 인스턴스는 이미 자신의': client_id'를 알고 있습니다. - 내가 너의 대답을 오해하니? – JellicleCat