Rails - 将 csv 文件导入嵌套路由

Rails - Import csv file into nested route

我已经按照 Railscast 396 剧集中概述的步骤成功导入了 CSV 文件。但是,现在我正在尝试导入嵌套的 csv。我看过其他帖子,其中人们试图同时导入父数据和子数据,但在这种情况下,我试图仅在 econ_report 显示视图中导入子数据。

例如,我尝试导入的 econ_results 嵌套在 econ_report 下。 rake 文件显示以下 link.

import_econ_report_econ_results

当我尝试加载 econ_report 的显示页面时,出现以下错误

No route matches {:action=>"import", :controller=>"econ_results", :id=>"1"} missing required keys: [:econ_report_id]

我在 econ_result.rd 文件中有以下代码:

def self.to_csv
CSV.generate do |csv|
  csv << column_names
  all.each do |sub|
    csv << sub.attributes.values_at(*column_names)
  end
end
end

 def self.import(file)
CSV.foreach(file.path,headers: true) do |row|
  EconResult.create! row.to_hash
end
end

最后,在 econ_results_controller 中我有以下代码:

before_action :set_econ_report
def set_econ_report
@econ_report = EconReport.find(params[:econ_report_id])
end

def import
EconResult.import(params[:file])
end

def create
@econ_result = @econ_report.econ_results.create(econ_result_params)
redirect_to @econ_report
end

@econ_report的指定是否导致控制器冲突?

您需要告诉 rails 您传递的记录是针对 econ_report_id 参数的。默认情况下,路由助手将使用传递的记录作为 id 参数。

<%= link_to import_econ_report_econ_results_path(econ_report_id: @econ_report) %>

我会写一个辅助方法,因为名字长得离谱。