2012-06-23 2 views
0

HTML 인터페이스를 통해 필요한 모든 작업을 수행하는 레일즈 앱이 있습니다. 이제는 기능 비트에 대한 액세스를 제공하는 API를 사용하고 싶습니다.Rails는 기존 컨트롤러 동작을 가리키는 경로를 사용하여 API를 구현합니다.

Routes.rb를 사용하여 다른 컨트롤러의 동작에 일부 API 컨트롤러 동작을 선택적으로 전달하는 방법은 무엇입니까?

나는 시도 다음

내 일반 컨트롤러 경로를 잘 사용하여 작업 :

match 'stuff' => 'stuff#index' 
get 'stuff/index' 
get 'stuff/some_get_action' 
post 'stuff/some_post_action' 

을하지만 난 내 API에 대한하려고하면

match 'api' => 'api#index' 
match 'api/some_get_action' => 'stuff#some_get_action', :via => :get 
match 'api/some_post_action' => 'stuff#some_post_action', :via => :post 

또는 ...

match 'api' => 'api#index' 
get 'api/some_get_action', :to => 'stuff#some_get_action' 
post 'api/some_post_action', :to => 'stuff#some_post_action' 

geg 오류. API URL을 테스트하기위한 양식이 포함 된 HTML 페이지를/api/index로 이동하면 url_for가 '경로 일치 없음 ...'이라는 '라우팅 오류'예외를 발생시킵니다.

+0

앱에 API를 사용하려면 모범 사례를 따라야합니다. app/v1과 같은 버전 관리를 도입하고 이에 대한 다른 컨트롤러를 만듭니다. 만약 당신이 뚱뚱한 모델 스키니 컨트롤러 접근 방식을 고수한다면, 이것은 꽤 쉽게 이루어져야합니다. –

답변

1

': as =>'을 포함하고 링크 경로로 사용할 경로 이름을 정의 할 수 있습니다.

get 'api/some_get_action' => 'stuff#some_get_action', :as => 'some_get_action' 

이고 인덱스 파일의 링크 경로에는 'some_get_action_path'가 있습니다. '일치'또는 '가져 오기'가 자동으로 ': as'로 설정하여 경로 이름으로 해석되는지 확실하지 않습니다.

테스트를 위해이 페이지를 설정하는 것이 좋습니다. 나는 항상 콘솔에서하고 있는데, 이는 단순히 링크를 클릭하는 것보다 어렵습니다. 귀하의 링크는 아마도 그들이 다음과 같다고 추론 할 필요가 있습니다.

+0

<% url_for : controller => 'api', : action => 'some_get_action'%>을 사용하고 있습니다. 그래서 _path 도우미 메서드로 문제가 있다고 생각하지 않습니다. – KrisG

+0

아마도 <% = url_for .. %>을 의미 할 것입니다. 왜 작동하지 않는지 잘 모르겠습니다. 위의 'get ...'으로 변경하면 'link_to some_get_action_path'만 필요하기 때문에 더 쉽게 작동 할 수 있습니다. –

+0

콜 (Cole), 도우미 방법을 사용하라는 귀하의 제안이 효과적이었습니다 (나는 :로 귀찮게하지 않았습니다). 이것이 url_for의 버그 인 것 같습니다? 나는 그것이 _path 도우미 메서드와 같은 것을하기를 기대한다. 그리고 나는 마술 경로 방법보다는 당신이 가리키고있는 컨트롤러/액션에 대해 좀더 명시 적으로 선호하는 url_for를 선호한다. – KrisG

관련 문제