2012-11-07 2 views
3

'Passing Multiple Parameters in a form_tag'의 질문은 form_tag 내에 매개 변수를 전달하는 방법에 대한 정보를 제공하지만 포스터는 궁극적으로 말단을 달성하는 다른 방법 (특히 숨겨진 양식 필드 사용)을 추구하기로 결정했습니다.rails form_tag _path parameters

같은 관점에서 코드의 라인을 사용하려고 할 때 : RoR에 컨트롤러가 사용할 'foo는'의 값을하지 않습니다 것처럼

form_tag(movies_path({:foo = "bar"}), {:id => "ratings_form", :method => :get}) do 

보인다; 그러한 시나리오에서 경로의 일부로 매개 변수를 전달하는 데 사용해야하는 또 다른 구문이 있습니까?

매개 변수를 URL의 일부로 전달하려면 이러한 접근 방식이 정확할 것이라고 생각하면됩니다 (사실 <form> 태그에 action="/movies?foo=bar" 문이 포함되어 있기 때문에 생성 된 HTML은 많은 것을 나타냅니다). 컨트롤러가 params[:foo]을 으로 평가하고 bar이 아닌 경우?

답변

2

나는 여기에 직장에서 두 가지 기본 문제 ...

첫 번째는 자신을 건네 실제 매개 변수가되고 있다고 생각합니다. The specificationGET 메서드를 사용하면 양식 데이터 집합이 URI에 추가되고 POST 메서드를 사용하면 양식 데이터 집합이 양식 본문에 포함되도록 지정합니다. 양식을 제출하면 GET 요청 (사용자가 지정한대로) 및 URL 매개 변수가 지정된 경우에도 (지정된 URL 매개 변수가 URI의 일부가 아님) 양식 필드에서 매개 변수가 생성됩니다. 검색 양식처럼 '링크 가능'상태가 아니라면 양식 제출을 위해 POST을 사용하는 것이 좋습니다.

두 번째 문제는 내가 보았 듯이 상당히 일반적입니다. Rails routing system은 처음에는 많은 사람들에게 이해하기 어렵습니다. 앞으로 movies_path은 routes.rb 파일의 해당 resources :movies 행에 있다고 가정합니다. 그렇다면 경로는 URL에서 정보를 전달하도록 설정되지 않으며 /movies이됩니다. movie_path은 URL을 통해 컨트롤러에 정보를 전달하도록 설정됩니다. 일반적인 사용은 리소스가 movie_path(@movie)처럼 인자로 모델링되는 객체 유형의 인스턴스를 사용하는 것입니다. 이 유형의 사용은 전달 된 객체에서 to_params을 실행하며, 기본적으로 객체의 ID를 반환하지만 쉽게 재정의 될 수 있습니다. 컨트롤러에서 params[:id]을 사용할 수 있습니다. 그냥 컨트롤러에서 사용할 수있게하기 위해, 함께 URL의 일부로서 자원이 백업되지 임의의 정보를 전송하려는 경우, 당신은 아마 이런 식으로, 그렇게 할 사용자 지정 경로를 정의하려면 :

match '/movies/:foo' => 'movies#index', :as => :movies 

이처럼 사용할 때 컨트롤러에 params[:foo] == 'bar'을 만들 것이다 :

movies_path('bar') 

을 어쨌든,이 도움이 행운을 바랍니다.

+0

야, 많이 감사! 우리 학급에 주어진 정보 ([email protected])를 토대로 나는 (이 문제와 관련된 숙제의 첫 부분에서) 매개 변수를 통해 매개 변수를 전달하는 방법을 설정하면서 문제가 무엇인지 말할 수 없었습니다. 'movies_path (: sort_by => "title")'...와 같은 호출이지만 'form_tag'HAML 요소의 범위에 포함되지 않았습니다. 이 경우 연결 가능 상태가 의도되었으므로 시도한 메서드가 충분할 것이라고 가정했기 때문에 (우리는 할당의 다음 부분에서 '세션'을 통해 매개 변수를 전달하기 만합니다.) –

+0

BTW, 당신이 언급 한'routes.rb' 라인을 추가하는 것은 라우트를 추가한다는 것을 알았지 만, CRUD 액션의 표준 세트를 생성하는'resources : movies' 라인의 출력은 첫 번째 컬럼으로 영향을받습니다 출력의 "영화"가 새 색인 작업과 관련되어 있음을 나타냅니다. 그러나 테스트는 인덱스 경로가 여전히 작동 함을 나타냅니다. 추신 : 게시물 끝에 "맞춤법 오류"가 표시되지만 수정을 시도 할 때 수정할 수 없습니다. 시도 할 때 여섯 가지 변경 사항이 필요합니다 ... –

+1

예, 경로가 순서대로 처리됩니다. 그것들은 (위에서 아래로) 정의되고, 그것이 나오는 첫 번째 일치를 치게 될 것입니다. "중첩"경로를 가질 수 있지만 첫 번째 경로 만 실제로 경로를 지정합니다. –

0

숨겨진 필드를 추가 할 수 없습니까?

hidden_field_tag 'foo', 'bar' 
+0

질문은 이러한 해결책이 이미 기존 게시물에서 확인되었음을 나타 내기 위해 앞에 붙었습니다. 이 커뮤니티에서 같은 것을 표현할 수있는 더 좋은 방법이 있다면 주저하지 말고 알려주세요. –

+0

죄송합니다. 죄송합니다. 나는 당신이 해결책으로 이것을 기각 한 것을 보지 못했습니다. –

+0

걱정할 필요가 없습니다. 나는 끝이 많은 방법으로 성취 될 수 있다는 것을 깨닫는다 ...그러나이 특별한 경우에는 문제가되는 인식 론적 질문이 있으며 특정 RoR/HAML 문제를 이해하지 않고서는 그 질문에 대답하기가 어렵지는 않습니다 (불가능하지는 않지만) 것처럼 보입니다 ... BTW, 어떤 아이디어? 필자는 디버거를 실행하고 실제로 params로 전달 될 것으로 예상되는 모든 것이 "foo"를 제외하고 거기에 있습니다 ... –