Podczas importowania pliku CSV, jak mogę obsługiwać dane w wierszu, który odpowiada powiązaniu?
Idę zaImportuj kolejkę CSV i to jest proste.
Problem polega na tym, że zajmuje się tylko plikiem csv zawierającym tylko informacje w 1 modelu w 1 pliku.
Powiedzmy, że mam plik CSV, który próbuję zaimportować do mojegoListing
Model. W każdym wierszu / liście znajduje się kolumna o nazwieBuilding
gdzie wartość jest w rzeczywistości nazwą atrybutu budynku tego wpisu (tj.@listing.building.name
).
Jak radzić sobie z tymi przypadkami w imporcie?
To jest szafa, którą Ryan dostaje w tej kolejce, która jest naProduct
model w jego przypadku:
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
product = find_by_id(row["id"]) || new
product.attributes = row.to_hash.slice(*accessible_attributes)
product.save!
end
end
Wszystko, co się dzieje, polega na sprawdzaniu, czy produkt istnieje i czy następnie aktualizuje atrybuty. Jeśli nie, utwórz nowy.
Nie do końca pewny, jak radzić sobie ze skojarzeniami w tym przypadku ... zwłaszcza, że to, co musi się wydarzyć, jest w przypadku, gdy powiązany rekord nie istnieje, musi zostać utworzony podczas tego procesu.
Wracając do mojegobuilding.name
przykład wcześniej, jeśli nie maBuilding.find_by_name(name)
, to powinno stworzyć nowy rekord budynku.
Myśli?