簡體   English   中英

Rails CSV導入-關聯參數

[英]Rails CSV import - association params

我試圖弄清楚如何導入CSV文件以創建新記錄並進行適當的關聯。

我有3種型號:
1) 農夫 (has_many:農場)
2) 農場 (has_many:crops,belongs_to:farmer)
3) 作物 (屬於:農場)

目標是讓用戶手動創建每個服務器場,然后通過CSV文件導入農作物。 我不知道如何將farm_id傳遞給要上傳的農作物,從而創建關聯。

在作物控制器上的導入操作:

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

在farms#show頁面上的上載表格:

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

您如何通過farms#show頁面上的@ farm.id來發送#crops和文件?
最好通過表單或其他方式執行此操作嗎?

您可以通過幾種方法來完成此操作,這取決於您的路線設置方式。

如果你有類似的東西

resources :farms do
  resources :crops
end

import_crops_path(@farm,@crop)將沿着/ farms /:farm_id / crops / new的行生成一個url

通過這兩個選項,您可以使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM