레일의 매개 변수 전달


202

rails에서 redirect_to의 매개 변수를 어떻게 전달합니까? 나는 이것을 사용하여 id를 전달할 수 있다는 것을 안다.

redirect_to :action => action_name,:id => 3

양식 데이터와 같은 추가 매개 변수를 전달하려면 어떻게해야합니까?

편집하다:

Ruby 2 구문의 경우 위의 스 니펫을 다음과 같이 업데이트해야합니다.

redirect_to action: action_name, id: 3

3
실제로 무엇을 달성하려고합니까? 세션에서 데이터 저장을 고려 했습니까?
Michael Sepcot

1
요청하는 것은 불가능합니다. 리디렉션을 수행하는 경우 리디렉션하려는 GET 요청이어야하므로 매개 변수가 항상 사용자에게 표시됩니다. 대신 세션에 물건을 저장해야합니다.
GregT

답변:


174

옵션에 추가하면됩니다.

redirect_to controller: 'thing', action: 'edit', id: 3, something: 'else'

양보 할 것이다 /thing/3/edit?something=else


22
POST로 리디렉션 할 수 없습니다. 3xx 정의의 HTTP 1.1 문서에서 : "필요한 조치는 두 번째 요청에 사용 된 방법이 GET 또는 HEAD 인 경우에만 사용자와의 상호 작용없이 사용자 에이전트가 수행 할 수 있습니다." 실제로 달성하려는 목표를 확장하면 올바른 방향으로 나아가게 될 것입니다.
jdl

안녕하세요 귀하의 답변에 감사드립니다. 나는 웹 개발의 초보자입니다. 나는 행동을 불러 일으키는 다른 방법을 알고 자 노력하고있다. 당신의 반응은 나의 많은 의심을 분명히했다. 다시 한 번 감사드립니다 :))
markiv

엄지 손가락. 나는 1 시간 이후 이것을 찾고 있었다.

86

RESTful 자원을 사용하는 경우 다음을 수행 할 수 있습니다.

redirect_to action_name_resource_path(resource_object, param_1: 'value_1', param_2: 'value_2')

or
#You can also use the object_id instead of the object
redirect_to action_name_resource_path(resource_object_id, param_1: 'value_1', param_2: 'value_2')

or
#if its a collection action like index, you can omit the id as follows
redirect_to action_name_resource_path(param_1: 'value_1', param_2: 'value_2')

#An example with nested resource is as follows:
redirect_to edit_user_project_path(@user, @project, param_1: 'value_1', param_2: 'value_2')

46

예를 들어 home # action으로 전송 된 양식 데이터가있는 경우 이제 매개 변수를 유지하면서 house # act로 경로를 재 지정하려고합니다.

redirect_to act_house_path(request.parameters)


1
이 매개 변수와 새로운 매개 변수를 결합하는 방법을 알고 있습니까? 즉 request.parameters, (또는 +) : this => : that
Chris Edwards

5
병합 방법을 사용할 수 있습니다. 예 :redirect_to act_house_path(request.parameters.merge(key: "value"))
GregT

3
병합 후 원하지 않는 매개 변수를 제외하기 위해 except 메소드를 사용할 수도 있습니다.redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
mr io

39

flash 매개 변수를 사용하여 임의의 객체를 템플릿에 전달할 수 있습니다.

 redirect_to :back, flash: {new_solution_errors: solution.errors}

그런 다음 해시를 통해 템플릿에서 액세스하십시오.

<% flash[:new_solution_errors].each do |err| %>

63
이것은 나쁜 습관입니다. 이 방법은 플래시 메시징을 사용자 메시지 용으로 잘못 사용합니다. 세션에 임의의 매개 변수를 저장 한 다음 완료되면 세션에서 해당 매개 변수를 지우는 것이 좋습니다.
GregT


7
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id

6
좀 더 설명해주세요. 코드 예제만으로는 충분하지 않습니다.
simonmenke

7

컨트롤러, 액션, 아이디 등이 아닌 추가 URL 매개 변수를 전달하는 방법을 찾고 있다면 다음과 같은 강력한 방법이 있습니다.

object_path(@object, params: request.query_parameters)

그것은 utm 매개 변수 또는 잃고 싶지 않은 다른 추가 매개 변수 를 전달 합니다.


4

route.rb

 match 'controller_name/action_name' => 'controller_name#action_name', via: [:get, :post], :as => :abc

파라미터로 리디렉션하려는 컨트롤러는 다음과 같습니다.

redirect_to abc_path(@abc, id: @id), :notice => "message fine" 

3

경로를 지정하고를 타고 params돌아 오십시오.

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.