Ich benötige ein Beispiel zum Importieren einer CSV-Datei mit unterschiedlichen Attributen. Wenn ich meinen Code ausführe, erhalte ich eine Fehlermeldung, die besagt, dass das Attribut "email" für Student unbekannt ist. Die E-Mail-Attribute können von Parent stammen. Neben dem Importieren der Attribute nur für Schüler und nur für Eltern. Wie kann ich die Attribute der Eltern in die Schülerattribute importieren?CSV-Datei mit verschiedenen Attributen aus einer anderen Klasse importieren
Mein Programm Arbeit finden, wenn ich meine CSV mit den Eltern exportiert Attribute in meinem Studentenprogramm.
Jede Hilfe wäre willkommen.
Schüler Modellklasse:
class Student < ActiveRecord::Base
belongs_to :parent
delegate :email,:name,:phone_number,to: :parent, allow_nil: true
def self.to_csv
attributes = %w{parent_id email phone_number first_name last_name age workshop interest registration_date email }
CSV.generate(headers: true) do |csv|
csv << attributes
all.each do |script|
csv << attributes.map{ |attr| script.send(attr) }
end
end
end
def self.import(file)
spreadsheet = open_spreadsheet(file)
header=spreadsheet.row(1)
(2..spreadsheet.last_row).each do |i|
row = Hash[[header,spreadsheet.row(i)].transpose]
#CSV.foreach(file.path, headers: true) do |row|
student = find_by_id(row["id"])|| new
student.attributes = row.to_hash.slice(*row.to_hash.keys)
student.save!
end
end
def self.open_spreadsheet(file)
case File.extname(file.original_filename)
when ".csv" then Roo::CSV.new(file.path)
when ".xls" then Roo::CSV.new(file.path)
when ".xlsx" then Roo::CSV.new(file.path)
else raise "Unknown file type: #{file.original_filename}"
end
end
end
Studenten Controller:
def import
Student.import(params[:file])
redirect_to root_url, notice: "student imported."
end
end
Ansicht Ordner:
<h2>Import Students</h2>
<%= form_tag import_students_path, multipart: true do %>
<%= file_field_tag :file %>
<%= submit_tag "Import" %>
<% end %>
Bitte geben Sie Ihren Code und den Fehler ein. – Uzbekjon
@Uzbekjon Ich bearbeite meinen Post mit dem Code. danke – user2803053
Könnten Sie auch den Fehler stacktrace hinzufügen? – Uzbekjon