【问题标题】:Ruby on Rails - Passing a large variable from view to controller (avoiding HTTP 414 Request-URI Too Large)Ruby on Rails - 将大变量从视图传递到控制器(避免 HTTP 414 Request-URI Too Large)
【发布时间】:2016-02-13 20:56:48
【问题描述】:

我正在尝试将我视图中已经可用的大型 Rub​​y 哈希 (@hash) 传递回我的控制器以进行额外处理。哈希来自同一个控制器,但将由不同的操作处理。

Stack Overflow 上有几篇关于使用 params 哈希将变量(哈希或其他方式)从 View 传递到 Controller 的文章,它们运行良好,但是生成的 HTTP GET 请求非常长(在我的情况下)并且通常是“ Apache 抛出 414 Request-URI Too Large' 错误。

这是我认为的代码:

<%= link_to "Go to controller for processing", :controller => 'query', :action => 'parse_data', :hash_contents => @data %>

这是我在控制器中用来处理@data 的代码:

def parse_data
  # take action on :hash_contents which now contains @data
end

也许我不应该使用 link_to 来处理这个问题,但我不知道将数据返回到我的控制器的替代方法。我还听说过使用 HTTP POST 而不是 GET(显然您可以传递隐藏字段),但我不确定如何在这种情况下实现它。非常感谢任何帮助!

【问题讨论】:

    标签: ruby-on-rails parameter-passing large-data


    【解决方案1】:

    要使用 POST 的表单获得完全相同的结果,必须为每个哈希键值创建隐藏字段,这似乎不太合理。

    但是您可以将其序列化为一个字段并在控制器本身中反序列化,例如 - json 会这样做:

    <%= form_tag your_controller_action_path, method: :post do %>
      <%= hidden_field_tag 'hash_contents', JSON.dump(@data) %>
      <%= submit_tag "Go to controller for processing" %>
    <% end %>
    

    然后在控制器中JSON.load(params[:hash_contents])

    【讨论】:

    • 我的方法有点偏离。谢谢,这很有帮助!我会尽快尝试并让您知道。是的,我主要使用 JSON,所以理论上可以工作。
    • 非常感谢!这完美地工作。感谢您抽出宝贵时间提供帮助。
    • 请注意,上面的答案有 %=> 作为 hidden_​​field_tag 的结束标记。大概应该更新成 %> 不然会报错,不过原理是对的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多