Я следую руководству по железнодорожной сети https://www.youtube.com/watch?v=_NSBm_Q431Y&t=487s по импорту данных с использованием файла excel в базу данных с помощью gem roo. Импорт и экспорт данных работает нормально, но в то время импорта реляционных данных он показывает мне следующее сообщение об ошибке:Как импортировать реляционные данные из файла excel
unknown attribute 'PzaXCja' for Producto.
Extracted source (around line #73):
row = Hash[[header, spreadsheet.row(i)].transpose]
producto = find_by_Clave(row["Clave"]) || new
producto.attributes = row.to_hash.slice(*row.to_hash.keys)
producto.save!
end
end
это мои методы в модели «Producto»:
has_one :productosxpza, class_name: "Productosxpza", foreign_key: "Producto"
accepts_nested_attributes_for :productosxpza
def self.to_csv(options = {})#exportar
CSV.generate(options) do |csv|
csv << column_names
all.each do |producto|
csv << producto.attributes.values_at(*column_names)
end
end
end
def self.import(file)#importar
spreadsheet = open_spreadsheet(file)
header = spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header, spreadsheet.row(i)].transpose]
producto = find_by_Clave(row["Clave"]) || new
producto.attributes = row.to_hash.slice(*row.to_hash.keys) #*row.to_hash.keys para rails 4 que sustituye el attr_accesible de rails 3
producto.save!
end
end
def self.open_spreadsheet(file)#importar
case File.extname(file.original_filename)
when '.csv' then Roo::Csv.new(file.path, packed: false, file_warning: :ignore)
#when '.xls' then Roo::Excel.new(file.path, packed: false, file_warning: :ignore)
when '.xlsx' then Roo::Excelx.new(file.path, packed: false, file_warning: :ignore)
#else raise "Unknown file type: #{file.original_filename}"
else raise "El formato debe ser .xlsx ó .csv"
end
end
ли печатать то, что переменная строка Его, вероятно, не в правильном формате 'producto.attributes = {ключ: значение}' –
@HoMan Этот метод позволил бы мне создавать записи с ассоциациями? – LuisC
@HoMan Когда я это делаю: producto.attributes = {Clave: Clave} Я получаю следующую ошибку: uninitialized constant Producto :: Clave – LuisC