添加链接以使用Rails下载CSV

时间:2015-08-28 06:39:38

标签: ruby-on-rails csv canvas

我已添加以下代码以下载CSV:

<%= form_tag(account_export_courses_list_path(@account), :method => :get) do |f| %>
  <a data-submit-form href="#" class="btn button-sidebar-wide"><i class="icon-export-content"></i> <%= t(:export_course_list_link, "Export Course List") %></a>
<% end %>

如果我检查元素,那么我可以看到以下内容:

<form method="get" action="/accounts/1/courses/export_list" accept-charset="UTF-8"><div style="margin:0;padding:0;display:inline"><input type="hidden" value="✓" name="utf8"></div>
      <a class="btn button-sidebar-wide" href="#" data-submit-form=""><i class="icon-export-content"></i> Export Course List</a>
</form>

我的控制器中添加了以下代码:

  def export_courses_list
    puts "===-----------------------------------==="
    if authorized_action(@context, @current_user, :export_course_list)
      puts "-------"
      report = CsvService.new(@context.courses.active.order(:name, :created_at).all, {
        fields:[
          {attribute_name: "name", display_name: "Course Name"}, 
          {attribute_name: "course_code", display_name: "Course Code"},
          {attribute_name: "created_at", display_name: "Created Date"}
        ]
      })
      send_data report.to_csv, :filename => "Courses.csv"
    end
  end

我的路线如下:

match 'courses/export_list' => 'accounts#export_courses_list', :as => :export_courses_list

点击链接后,&#34;导出课程列表&#34;我应该能够下载CSV。但我无法看到任何行动。提前谢谢。

2 个答案:

答案 0 :(得分:1)

移动此路线

match 'courses/export_list' => 'accounts#export_courses_list', :as => :export_courses_list 

以上路线

resources :courses

然后在link_to中使用它。它应该工作。

答案 1 :(得分:-1)

我认为行动已经完成。 如果您不确定,请将其删除,然后再次尝试点击链接。 您可以使用Rails.logger.info代替puts来确保正确写入日志。

<强>更新

我以为你可以下载csv,但可能不是

您的路线会将网址/courses/export_list映射到export_courses_list

中的操作AccountsController

但是表单中的网址是/accounts/1/courses/export_list,因此不会执行操作

您可以将路线更改为此类

resources :accounts do
  member do
    get :export_courses_list, path: :export_list
  end
end

并在视图中使用link而不是form

<%= link_to export_courses_list_account_path(1), class: "btn button-sidebar-wide" do %>
  <i class="icon-export-content"></i> Export Course List
<% end %>