我试图弄清楚如何导入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与文件一起导入?作为最好通过表单或其他方式进行此操作?
答案 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