【问题标题】:Passing parameters in rails redirect_to在 rails redirect_to 中传递参数
【发布时间】:2010-11-28 15:37:48
【问题描述】:

我们如何在rails的redirect_to中传递参数? 我知道我们可以使用这个来传递 id:

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

如果我想传递一些额外的参数比如一些表单数据如何实现呢?

编辑:

对于 Ruby 2 语法,您必须将上面的 sn-p 更新为:

redirect_to action: action_name, id: 3

【问题讨论】:

  • 您实际上想要完成什么?您是否考虑过在会话中保存数据?
  • 你所要求的是不可能的——如果你正在做一个重定向,它必须是一个你重定向到的 GET 请求,所以你的用户总是可以看到参数.您应该将内容存储在会话中。

标签: ruby-on-rails


【解决方案1】:

只需将它们附加到选项:

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

将产生/thing/3/edit?something=else

【讨论】:

  • 您不能使用 POST 重定向。来自 3xx 定义下的 HTTP 1.1 文档:“当且仅当第二个请求中使用的方法是 GET 或 HEAD 时,用户代理可以在不与用户交互的情况下执行所需的操作。”扩展您真正想要完成的工作,我们可能会将您推向正确的方向。
  • 您好,非常感谢您的回复。我是 Web 开发的新手。我想知道调用动作的不同方法。你的回答澄清了我的很多疑问。再次感谢:))
  • 点赞。我从 1 小时开始就一直在寻找这个。
【解决方案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')

【讨论】:

    【解决方案3】:

    如果你有一些表单数据,例如发送到 home#action,现在你想在保留参数的同时将它们重定向到 house#act,你可以这样做

    redirect_to act_house_path(request.parameters)

    【讨论】:

    • 您知道如何将这些与新参数结合起来吗?即request.parameters,(或+):this =>:that
    • 您可以使用合并方法。例如:redirect_to act_house_path(request.parameters.merge(key: "value"))
    • 合并后也可以使用 except 方法排除不需要的参数:redirect_to act_house_path(request.parameters.except(:authenticity_token, :controller, :action, :utf8, :commit)
    【解决方案4】:

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

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

    然后通过哈希在模板中访问它们。

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

    【讨论】:

    • 这是不好的做法。此方法误用了 flash 对象,它旨在用于用户消息传递。最好在会话中存储任意参数,然后在完成后从会话中清除这些参数。
    【解决方案5】:
    redirect_to new_user_path(:id => 1, :contact_id => 3, :name => 'suleman')
    

    【讨论】:

      【解决方案6】:

      如果您正在寻找一种方法来传递额外的 URL 参数(不是控制器、操作、id 等),这里有一个可靠的方法:

      object_path(@object, params: request.query_parameters)
      

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

      【讨论】:

        【解决方案7】:
        redirect_to :controller => "controller_name", :action => "action_name", :id => x.id
        

        【讨论】:

        • 您能否提供更多解释。仅仅一个代码示例是不够的。
        【解决方案8】:

        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" 
        

        【讨论】:

          【解决方案9】:

          走你的路,走params,然后返回:

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

          【讨论】:

            【解决方案10】:

            从 Rails 6 开始,您可以简单地调用 redirect_to,后跟您希望重定向到的路径,例如 home_path,然后传递键值对的哈希值。

            示例:

            redirect_to home_path(name: 'Jason', needs: 'help with rails', help: true)
            

            在此之后,您将能够从 params 哈希中检索这些值。

            params[:name]

            检索字符串'Jason'

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-10-25
              • 1970-01-01
              相关资源
              最近更新 更多