Ruby on rails 以rails表单_标记方法发送对象

Ruby on rails 以rails表单_标记方法发送对象,ruby-on-rails,ruby,Ruby On Rails,Ruby,我无法使用rails form_tag form helper发送对象。我试过以下方法 Download:<%=form_tag({controller: "orders", action: "csv_downloader",format: "csv"}, method: "post") do%> <%= hidden_field_tag(:data, @orders_customs_display) %>

我无法使用rails form_tag form helper发送对象。我试过以下方法

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
def self.to_csv
CSV.generate do | CSV|

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

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

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

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