0

モデルを .xlsx にエクスポートし、axlsx テンプレートのいくつかのパラメーター (チェックボックス) を送信する必要があります。

コントローラー "leads" とカスタム ポスト アクション "export" があり、export.xlsx.axlsx テンプレートを呼び出す必要があります。

def export
  respond_to do |format|
      format.xlsx ## here is invoking my export.xlsx.axlsx
  end
end

私のroutes.rbには次のものがあります:

resources :leads do
  collection { post :ipmort }
end

次のビューを実装しようとしています。

<%= form_tag export_leads_path do %> 
  <%= button_to "Export to Excel", {controller: 'leads', action: "export", 
      remote: true, form: { "data-type" => "xlsx" }} %>
<% end %>

しかし、このボタンをクリックすると、html データ形式が取得されましたが、xlsx は取得されませんでしたここに画像の説明を入力

submit_tag、button_toにrespond_toフォーマットを指定する可能性はありますか?

<%= link_to %> を使用しようとしましたが、フォーム パラメータを取得できません。

<%= form_tag export_leads_path do %> 
  <%= link_to "Excel", export_leads_path(format: "xlsx", commit: "Excel"), method: :post %>
<% end %>

ここでは、lead_ids パラメータを持っていません:

ここに画像の説明を入力

<% submit_tag %> も試しましたが、結果は <%= button_to %> と同じでした

私を助けてください、私は一日中この問題に苦しんでいて、他に何ができるか考えていません..追加情報が必要な場合はお知らせください。できるだけ早く提供します!

前もって感謝します!

4

2 に答える 2

1

私は解決策を見つけました。ここに私のヒントがあります。同じ問題に直面している誰かに役立つことを願っています。

1) ルート:

resources :leads do
  collection { post :export }
end

2) コントローラーのアクション:

 def export
    case params[:commit]
      when "To Excel" then render xlsx: 'export'
      when "To CSV" then send_data @leads.to_csv_modified(@lead_ids), filename: 'export.csv'
      else render action: "index"
    end
  end

3) 表示:

  <%= form_tag export_leads_path, method: :post do %>
    <%= text_field_tag :created_at_first %>
    <%= text_field_tag :created_at_last%>

    <% Lead.new.attributes.keys[0...Lead.new.attributes.keys.length-1].each_with_index do |field, index| %>
      <%= check_box_tag "lead_ids[]", field, checked = true %>
      <%= field %>
    <% end %>

    <%= submit_tag 'To Excel', controller: 'leads', action: "export" %>
    <%= submit_tag 'To CSV', controller: 'leads', action: "export" %>
  <% end %>

4) Axlsx テンプレート(レンダー xlsx: 'export' を使用してコントローラーで呼び出す):

$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../lib"

require 'axlsx'

p = Axlsx::Package.new
wb = xlsx_package.workbook
 style_shout = wb.styles.add_style sz: 16, b: true, alignment: { horizontal: :center }
 wb.add_worksheet(name: "#{Time.now.to_date}") do |sheet|
   sheet.add_row params[:lead_ids]
   @leads.each_with_index do |lead, index|
     sheet.add_row params[:lead_ids].map {|e| lead.send(e) }
   end
 end

5) メソッド to_csv_modified (コントローラーで send_data @leads.to_csv_modified(@lead_ids)、ファイル名: 'import.csv' で呼び出す):

def self.to_csv_modified(lead_ids, options = {})
    CSV.generate(options) do |csv|
      csv << lead_ids
      all.each do |lead|
    csv << lead.attributes.values_at(*lead_ids)
      end
    end
end

それがどのように機能しているかを確認したい場合は、私の github conditional_exporting_to_XLSX_with_paramsにアクセスしてください。

別の便利なリンク: Axlsx_documentationRailscast #396 - importing csv-and-excelRailscast #362 - exporting csv-and-excel

于 2013-12-05T09:39:36.013 に答える