Ruby on rails 在rails中传递参数将_重定向到

Ruby on rails 在rails中传递参数将_重定向到,ruby-on-rails,Ruby On Rails,如何将重定向_中的参数传递到rails中? 我知道我们可以通过以下方式传递id: redirect_to :action => action_name,:id => 3 如果我想传递额外的参数,比如一些表单数据,如何实现 编辑: 对于Ruby 2语法,您必须将上面的代码段更新为: redirect_to action: action_name, id: 3 只需将它们附加到选项: redirect_to controller: 'thing', action: 'edit', i

如何将重定向_中的参数传递到rails中? 我知道我们可以通过以下方式传递id:

redirect_to :action => action_name,:id => 3
如果我想传递额外的参数,比如一些表单数据,如何实现

编辑:

对于Ruby 2语法,您必须将上面的代码段更新为:

redirect_to action: action_name, id: 3

只需将它们附加到选项:

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

是否会产生
/thing/3/edit?something=else

只需将它们附加到选项中:

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

如果使用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')

如果使用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')

可以使用flash参数将任意对象传递给模板

 redirect_to :back, flash: {new_solution_errors: solution.errors}
然后通过散列在模板中访问它们

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

您可以使用flash参数将任意对象传递到模板

 redirect_to :back, flash: {new_solution_errors: solution.errors}
然后通过散列在模板中访问它们

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

如果您有一些表单数据,例如发送到主页的动作,现在您想将它们重定向到主页的动作,同时保留参数,您可以这样做


redirect_to act_house_path(request.parameters)

如果您有一些表单数据,例如发送到主页的动作,现在您想将它们重定向到house#在保留参数的同时进行动作,您可以这样做


重定向到操作路径(request.parameters)
路由.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" 

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" 

如果您正在寻找传递其他URL参数(而不是控制器、操作、id等)的方法,这里有一个强大的方法:

object_path(@object, params: request.query_parameters)

这将传递utm参数或任何其他您不想丢失的附加参数。

如果您正在寻找传递附加URL参数(而不是控制器、操作、id等)的方法,以下是一种可靠的方法:

object_path(@object, params: request.query_parameters)

这将传递utm参数或您不想丢失的任何其他附加参数。

路由您的路径,并获取
参数
,然后返回:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return

选择路径,选择
参数
,然后返回:

redirect_to controller: "client", action: "get_name", params: request.query_parameters and return

从Rails 6开始,您可以简单地调用
redirect\u to
,然后调用您希望重定向到的路径,例如
home\u path
,然后pass是键值对的散列

例如:

redirect_to home_path(name: 'Jason', needs: 'help with rails', help: true)
在此之后,您将能够从params散列中检索这些值

params[:name]


要检索Rails 6中的字符串“Jason”

,只需调用
redirect\u to
,后跟要重定向到的路径,如
home\u path
,然后pass是键值对的散列

例如:

redirect_to home_path(name: 'Jason', needs: 'help with rails', help: true)
在此之后,您将能够从params散列中检索这些值

params[:name]



要检索字符串“Jason”

,您不能使用POST重定向。根据3xx定义下的HTTP 1.1文档:“当且仅当第二个请求中使用的方法是GET或HEAD时,所需的操作可由用户代理执行,而无需与用户交互。”请详述您真正想要完成的工作,我们可能会将您推向正确的方向。您好,非常感谢您的回复。我是web开发的新手。我正试图了解不同的行动方式。你的回答澄清了我的许多疑问。再次感谢:)竖起大拇指。我已经找了一个小时了。你不能用帖子重定向。根据3xx定义下的HTTP 1.1文档:“当且仅当第二个请求中使用的方法是GET或HEAD时,所需的操作可由用户代理执行,而无需与用户交互。”请详述您真正想要完成的工作,我们可能会将您推向正确的方向。您好,非常感谢您的回复。我是web开发的新手。我正试图了解不同的行动方式。你的回答澄清了我的许多疑问。再次感谢:)竖起大拇指。我已经找了一个小时了。你到底想做什么?您是否考虑过在会话中保存数据?您所要求的是不可能的——如果您正在执行重定向,则必须是您要重定向到的GET请求,因此参数将始终对您的用户可见。您应该在会话中存储内容。您实际上想要完成什么?您是否考虑过在会话中保存数据?您所要求的是不可能的——如果您正在执行重定向,则必须是您要重定向到的GET请求,因此参数将始终对您的用户可见。您应该在会话中存储内容。您知道如何组合这些内容以及新参数吗?i、 e.request.parameters,(或+):this=>:您可以使用合并方法。例如:
redirect\u to act\u house\u path(request.parameters.merge(key:“value”))
您也可以在合并后使用except方法排除不需要的参数:
redirect\u to act\u house\u path(request.parameters.except(:authenticity\u token,:controller,:action,:utf8,:commit)
您知道如何将其与新参数组合在一起吗?即request.parameters,(或+):this=>:您可以使用合并方法。例如:
重定向到act\u house\u路径(request.parameters.merge(key:“value”))
您还可以使用except方法在合并后排除不需要的参数:
重定向到act\u house\u路径(请求.参数.除了(:authenticity_token,:controller,:action,:utf8,:commit)
请您提供更多的解释。仅仅一个代码示例是远远不够的。请您提供更多的解释。仅仅一个代码示例是远远不够的。这是一个糟糕的做法。此方法误用了flash对象,其目的是为用户发信息。最好是存储任意参数