0

我无法使用 rails form_tag 表单助手发送对象。我试过以下

Download:<%=form_tag({controller: "orders", action: "csv_downloader",format: "csv"}, method: "post") do%>
                    <%= hidden_field_tag(:data, @orders_customs_display) %>
                    <%= submit_tag ("Download CSV"),:class => "btn btn-success download" %>
                  <% end %>

在视图和控制器中,我有以下内容

  def csv_downloader
    data=params[:data]
    respond_to do |format|
        format.csv { send_data data.to_csv }
      end
  end

在路线中,我有以下内容:

  match "csv_downloader", to: "orders#csv_downloader", via: [:post]

如您所见, .to_csv 是用 order.rb 模型编写的自定义函数

  def self.to_csv
    CSV.generate do |csv|
      csv << column_names
      all.each do |order|
        csv << order.attributes.values_at(*column_names)
      end
    end
  end

当我尝试下载时,出现以下错误。

 undefined method `to_csv' for #<String:0x0000000716f8a8>

这本质上是参数是作为字符串而不是作为对象出现的?我该如何纠正这个问题?

4

1 回答 1

0

您可以通过 html 表单发送字符串或文件,但不能发送复杂对象。

你可以做什么:将对象(Marshal)序列化为隐藏的字符串字段,稍后再次在控制器上将字符串反序列化为对象。但这可能是不安全的,因为用户可能能够更改序列化数据。

首选方法是以与 html 视图相同的方式重新创建数据,但不是渲染视图而是发送 csv 文件。

于 2013-11-11T10:31:00.087 回答