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) %>
我会写一个辅助方法,因为名字长得离谱。
我已经按照 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) %>
我会写一个辅助方法,因为名字长得离谱。