[英]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.