Ruby on Rails - 将大变量从视图传递到控制器(避免 HTTP 414 Request-URI Too Large)

Ruby on Rails - Passing a large variable from view to controller (avoiding HTTP 414 Request-URI Too Large)

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

Stack Overflow 上有几篇关于使用参数哈希将变量(哈希或其他)从视图传递到控制器的文章,它们工作得很好,但是生成的 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 的讨论(显然您可以传递一个隐藏字段),但我不确定如何在这种情况下实现它。非常感谢任何帮助!

为了使用 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])