【问题标题】:Rails - How to export nested resources to CSV in Rails?Rails - 如何在 Rails 中将嵌套资源导出到 CSV?
【发布时间】:2016-03-09 21:47:16
【问题描述】:

我正在尝试在 Rails 4 中将一些数据导出到 CSV。我有两个模型:Excursions 和 Inscriptions。一次远足有许多铭文,一种铭文属于一次远足。

我的嵌套路由是这样定义的:

  resources :excursions do
    resources :inscriptions
    get 'exportcsv' => 'excursions#download'
  end

所以我试图实现的行为是:当我访问路线 /excursions/1/exportcsv 时,CSV 将被下载到我的计算机上,其中包含所有带有 excursion_id = 的题词1 个 CSV 格式。

在我的游览模型中,我定义了 self.to_csv:

  def self.to_csv(options = {})
    CSV.generate(options) do |csv|
      csv << column_names
      self.inscriptions.each do |inscription|
        csv << inscription.attributes.values_at(*column_names)
      end
    end
  end

还有我的游览控制器的方法下载:

  def download
    @excursion = Excursion.find(params[:id])
    respond_to do |format|
      format.html
      format.csv { send_data @excursion.to_csv }
    end
  end

编辑:当我去这样的路线时:/excursions/:id/exportcsv 服务器抛出 ActiveRecord::RecordNotFound 错误。这个错误很容易解决,但如果我解决了 RecordNotFound ,我会在这一行得到一个 ActionController::UnknownFormat :

  def download
    @excursion = Excursion.find(params[:id])
    respond_to do |format|  ########THIS LINE
      format.html
      format.csv { send_data @excursion.to_csv }
    end
  end

我做错了什么?也许所有这些方法都不正确......

【问题讨论】:

  • 有什么问题? CSV 的输出是什么?您是否对 csv 标题列或其他问题有疑问?
  • @Dharam 我已经更新了这个问题。对不起!

标签: ruby-on-rails csv nested-resources


【解决方案1】:

我会将路线更新为以下内容:

resources :excursions do
  get 'download', on: :member, constraints: { format: /(html|csv)/ }
  resources :inscriptions
end

您的模型代码中也存在错误。您正在导出 inscriptions,但使用的是 Excursion column_names 而不是 Inscription column_names。以下是更新的型号代码。

class Excursion < ActiveRecord::Base
  def to_csv(options = {})
    CSV.generate(options) do |csv|
    inscription_column_names = Inscription.column_names

    csv << inscription_column_names

    self.inscriptions.each do |inscription|
      csv << inscription.attributes.values_at(*inscription_column_names)
    end
  end
end

现在尝试访问http://localhost:3000/excursions/:id/download.csv

:id 替换为现有的 Excursion 记录 ID。如果您仍然遇到ActiveRecord::RecordNotFound 错误,那么问题可能是您尝试访问数据库中实际不存在的Excursion

【讨论】:

  • 我已经更新了代码,但现在服务器正在抛出:缺少模板游览/下载,应用程序/下载与 {:locale=>[:en], :formats=>[: html], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}。
  • 好的,我错过了 .csv 扩展名。无论如何,现在服务器说没有名为 to_csv 的方法:undefined method 'to_csv' for #&lt;Excursion:0x007efebfa93098&gt; Did you mean? to_s
  • 将类方法to_csv转换为实例方法to_csv。更新了答案。
  • 起来,对不起!我的错:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多