【问题标题】:Rails - Import csv file into nested routeRails - 将 csv 文件导入嵌套路由
【发布时间】:2015-09-11 04:43:46
【问题描述】:

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

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

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 的指定是否导致控制器中的冲突?

【问题讨论】:

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


    【解决方案1】:

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

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

    我会写一个辅助方法,因为名字太长了。

    【讨论】:

    • 做到了,Max!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-19
    • 2011-09-07
    • 2018-12-28
    相关资源
    最近更新 更多