Передача параметров в рельсы redirect_to - PullRequest
185 голосов
/ 16 сентября 2009

Как мы передаем параметры в redirect_to в рельсах? Я знаю, что мы можем передать идентификатор, используя это:

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

Если я хочу передать дополнительные параметры, такие как данные формы, как этого добиться?

EDIT:

Для синтаксиса Ruby 2 вы должны обновить приведенный выше фрагмент:

redirect_to action: action_name, id: 3

Ответы [ 9 ]

162 голосов
/ 16 сентября 2009

Просто добавьте их к опциям:

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

даст /thing/3/edit?something=else

76 голосов
/ 03 января 2010

Если вы используете ресурсы 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')
43 голосов
/ 08 августа 2012

Если у вас есть данные формы, например, отправленные в home # action, теперь вы хотите перенаправить их в house # act с сохранением параметров, вы можете сделать это

redirect_to act_house_path(request.parameters)

38 голосов
/ 08 апреля 2011

Вы можете передавать произвольные объекты в шаблон с помощью параметра flash.

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

А затем получить к ним доступ в шаблоне через хеш.

<% flash[:new_solution_errors].each do |err| %>
28 голосов
/ 26 августа 2013
redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman')
6 голосов
/ 17 февраля 2012
redirect_to :controller => "controller_name", :action => "action_name", :id => x.id
3 голосов
/ 16 августа 2014

routes.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" 
2 голосов
/ 02 ноября 2018

Если вы ищете способ передать дополнительные параметры URL (не контроллер, действие, идентификатор и т. Д.), Вот надежный метод для этого:

object_path(@object, params: request.query_parameters)

Это передаст параметры utm или любые другие дополнительные параметры, которые вы не хотите потерять.

1 голос
/ 22 мая 2019

Проложите свой путь, возьмите params и вернитесь:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...