Ao importar um CSV, como manipulo dados em uma linha que corresponde a uma associação?
Estou seguindo oImportar Railscast CSV e é direto.
O problema é que ele lida apenas com um arquivo csv contendo apenas informações em 1 modelo em 1 arquivo.
Digamos que eu tenha um arquivo CSV que estou tentando importar para o meuListing
modelo. Em cada linha / listagem, tem uma coluna chamadaBuilding
onde o valor é, na verdade, o nome do atributo de construção dessa listagem (por exemplo,@listing.building.name
).
Como faço para lidar com esses casos na importação?
Este é o armário que Ryan recebe no Railscast, que está noProduct
modelo em seu caso:
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
Tudo o que está acontecendo é que ele está verificando se o produto existe e atualiza os atributos. Se isso não acontecer, crie um novo.
Não tenho certeza como lidar com as associações neste caso ... especialmente considerando que o que precisa acontecer é no caso de um registro associado não existir, ele precisa ser criado durante este processo.
Então, voltando ao meubuilding.name
exemplo anterior, se não houverBuilding.find_by_name(name)
, então deve criar um novo registro de construção.
Pensamentos?