Rails CSV导入 - 关联参数

时间:2017-09-22 18:53:39

标签: ruby-on-rails ruby csv associations

我试图弄清楚如何导入CSV文件以创建新记录并进行适当的关联。

我有3个型号:
1)农民(has_many:农场)
2)农场(has_many:crop,belongs_to:农民)
3)裁剪(belongs_to:farm)

目标是让用户手动创建每个服务器场,然后通过CSV文件导入作物。我无法弄清楚如何将farm_id传递给上传的作物,从而创建关联。

Crops控制器上的导入操作:

def import
  Crop.import(params[:file], params[:farm_id])
  redirect_to root_url, notice: "Crops imported."
end

裁剪模型中的导入方法:

    def self.import(file, farm)
      CSV.foreach(file.path, headers: true, encoding:'iso-8859-1:utf-8') do |row|
        row["farm_id"] = farm
        Crop.create! row.to_hash
      end
    end

在服务器场上传的表单#show page:

#@farm = Farm.find(params[:id])
<%= form_tag import_crops_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "import CSV" %>

如何通过农场上的@ farm.id发送#show页面以及#empile与文件一起导入?作为最好通过表单或其他方式进行此操作?

1 个答案:

答案 0 :(得分:1)

您可以通过几种方式执行此操作,具体取决于您的路线设置方式。

如果您有类似

的内容
resources :farms do
  resources :crops
end

import_crops_path(@ farm,@ cf)将生成/ farms /:farm_id / crops / new

行的网址

使用这两个选项,您可以使用params [:farm_id]

获取服务器场ID

另一种选择是使用隐藏字段。

f.hidden_field(:farm, :id)

这将创建一个html字段

<input type="hidden" id="farm_id" name"farm[id]" value="#{@farm.id}" />

使用这两个选项,您可以使用params [:farm_id]

获取服务器场ID

参考

https://apidock.com/rails/ActionView/Helpers/FormHelper/hidden_field http://guides.rubyonrails.org/routing.html