我正在尝试将一个变量从我的视图传递给我在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
答案 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