在链接中将参数传递给控制器​​的“轨道方式”是什么?

时间:2016-06-28 11:33:03

标签: ruby-on-rails

我正在尝试将一个变量从我的视图传递给我在link_to中的控制器。我的link_to:

<%= link_to "Download CSV", vendor_skus_path(format: "csv") %>

我想传递一个额外的过滤器参数,但是此参数在视图中设置,并且不是表单的一部分。如何将此参数提供给我的控制器,以便我可以在我的模型中使用它?我如何构建额外的过滤器参数:

<%= select_tag "vendor-select", options_from_collection_for_select(@vendors, "id", "name"), include_blank: true, class:"vendor-select form-control" %> 

在我的vendor_skus #index控制器中,我这样做:

respond_to do |format|
  format.html
  format.csv { send_data @vendor_skus.to_csv }
end   

我想要的是下面的内容,以便我可以使用额外的参数来过滤导出的行。

respond_to do |format|
  format.html
  format.csv { send_data @vendor_skus.to_csv, vendor_id }
end  

1 个答案:

答案 0 :(得分:0)

参加聚会有点晚,但是希望这对可能遇到类似情况的人有所帮助。我刚遇到类似的问题。我需要传递其他过滤参数,以导出特定于显示页面上正在查看的记录的关联数据。

您可以在link_to路径的 ”格式:“ CSV”” 之后传递参数。

  

以下步骤应有助于您实现目标。 请注意,我对您的设置进行了假设。我假设您有一个VENDOR模型,每个VENDOR都有has_many:vendor_skus。因此,您的第二个关联模型将是VENDOR_SKU,属于Vendor_to:供应商。

1。创建一个链接,该链接传递可用于过滤的参数。

<%= link_to "Download CSV", vendorskus_export_path(format: "csv", :id => @vendor.id) %> 

上面的link_to看起来像这样:

/ventorskus/export.csv?id=3

2。为链接(/config/routes.rb)创建GET路由

get '/vendorskus/export', to: 'vendor_skus#export'

3。在vendor_skus控制器中创建“导出”

def export
    require 'csv'
    vendor = vendor.find(params[:id])
    @export_metadata = vendor.vendor_skus.all
    respond_to do |format|
      format.html
      format.csv { send_data @export_metadata.to_csv, filename: "Vendor-#{vendor.id}_SKUS_#{Date.today}.csv" }
    end
end

4。配置您的VENDOR_SKU模型(/model/vendor_sku.rb)

class VendorSkus < ApplicationRecord
  #-- Associations --#
  belongs_to :vendor

  #-- Validation Code Here --#
  #-- Scopes Code Here --#
  #-- Custom Code Here --#

  #------------------------------------------------------#
  private
  def self.to_csv
     CSV.generate do |csv|
       csv << column_names
       all.each do |result|
        csv << result.attributes.values_at(*column_names)
       end
     end
  end