2011-05-16 2 views
5

내 Rails 3.0 앱에는 인덱스 페이지 인 GET 대신 POST를 사용해야하는 매우 큰 검색 양식이 있습니다.레일 3 : 인덱스 페이지에서 POST 양식 사용?

현재 리소스 # index로 라우팅하려면 응용 프로그램에서 POST 요청을 resource # create로 라우팅합니다. 나는 이것이 RESTful 경로라는 것을 알고 있지만 그것을 오버라이드 (override)해야한다. 리소스의 새 레코드를 만들 수있는 기능을 유지하면서 어떻게 할 수 있습니까?

감사합니다.

+0

검색 양식에 POST를 사용하지 않으면 REST 패러다임에 위배됩니까? GET이 더 적절하지 않습니까? – Wukerplank

+1

GET이 더 적절하지만 URL 길이 제한이 모든 검색 매개 변수에 비해 너무 작습니다. – Andrew

답변

2

당신은 이후에만있는 "검색"행동을 갖는 것이 더 낫다 다음과 인덱스 템플릿 등을 렌더링

resources :my_things do 
    post :index 
end 
0

컨트롤러의 "만들기"작업 끝점에서 2 가지 작업을 수행하도록하려는 경우 - 검색에 응답하고 만들기도 수행 하시겠습니까? 나쁜 생각이지만 솔루션은 하나 또는 다른 것을 만들기 위해 작성 액션에서 "if"조건을 사용하는 것처럼 간단 할 수 있습니다. 만족스럽지 않은 답변이라면 질문을 조금 더 명확하게 설명하십시오.

class MyController < ... 
    def search 
    @my_things = MyThing.find_with_search_params(params[:search]) 
    render :action => :index 
    end 
end 
+0

나는 그것이 나쁜 생각 인 것을보고 그것을 피하고 싶습니다. 나는 두 가지 모두에 대해 컨트롤러를 만드는 대신 라우팅 솔루션이 필요하다고 생각했다. 아마도 색인 페이지에서 검색을위한 URL을 리소스/검색 또는 리소스/모두와 같은 것으로 이동시키는 것일 것입니다. – Andrew

+1

정말 편안하다면 완벽하게 작동합니다./resources GET이있는 URL은 색인 작업을 수행하고 검색을 수행하며 POST로/resources가 작성 작업을 수행하고 잘 작성합니다. 보기는 검색 링크/버튼이 GET 메소드이고 작성이 POST를 사용하고 있는지 확인해야합니다. 이것은 라우팅 솔루션입니다./GET => 인덱스 및/resources> POST =>를 가진 리소스. –

3

당신은 인덱스를 사용할 수 있습니다, 단지 레일 3 노선이 추가 : -