Ich importiere einige Daten in meine Rails App über Excel. Der Import funktioniert gut, aber wenn ich und Import Hüterin Datei versuchen, erhalte ich eine Fehlermeldung:ActiveRecord :: UnknownAttributeError in ReportsController # Import unbekanntes Attribut 'relation' für Student
unknown attribute 'relation' for Student.
Dieses Feld gehört nicht zu den Studenten, aber während des Imports, wenn ich wähle Studentenimportdatei seines in der richtigen eingefügt zu werden Weise. Aber wenn ich Guardian-Datei importiere, zeige es mir den Fehler an.
Ich habe versucht, den Code params[:role] == :guardian ? Guardian : Student
ich diesen
`[1] pry(#<ReportsController>)> params[:role] == :guardian ? Guardian : Student
=> Student(id: integer, admission_no: string, class_roll_no: string, admission_date: date, first_name: string, middle_name: string, last_name: string, batch_id: integer, date_of_birth: date, gender: string, blood_group: string, birth_place: string, nationality_id: integer, language: string, religion: string, category_id: integer, address_line1: string, address_line2: string, city: string, state: string, pin_code: string, country_id: integer, phone1: string, phone2: string, email: string, immediate_contact: integer, is_sms_enabled: boolean, status_description: string, is_active: boolean, is_deleted: boolean, created_at: datetime, updated_at: datetime, image_file_name: string, image_content_type: string, image_file_size: integer, image_updated_at: datetime)`
es geht nur teilweise auf die sonst nur bekam zu debuggen und akzeptiert Studenten einreichen.
Controller
def importer
params[:role] == :guardian ? Guardian : Student
end
def import
importer.import(params[:file])
redirect_to import_reports_path, notice: "Students imported."
end
student.rb
COLUMNS_TO_STRING = ["batch_id", "class_roll_no","phone1","phone2"] # and so on
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]
row = clean_for row, COLUMNS_TO_STRING
record = Student.find_by(:id => row["id"],:batch_id => row["batch_id"],:class_roll_no => row["class_roll_no"],:phone1 => row["phone1"],:phone2 => row["phone2"]) || new
record.attributes = row.to_hash.slice(*row.to_hash.keys)
record.save!
end
end
guardian.rb
COLUMNS_TO_STRING = ["student_id"] # and so on
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]
row = clean_for row, COLUMNS_TO_STRING
guardian = Guardian.find_by(:id => row["id"],:student_id => row["student_id"]) || new
guardian.attributes = row.to_hash.slice(*row.to_hash.keys)
guardian.save!
end
end
Ansicht
<h1>IMPORT</h1>
<div class = "well">
<p>
<%= form_tag import_reports_path do %>
<%= file_field_tag :file%>
<br>
<%= submit_tag "Import",class: "btn btn-primary" %>
<% end %>
</p>
</div>
können Sie Ausgang in der Steuerung setzen und prüfen Sie den Klassentyp von params [: Rolle] .class- ob es Zeichenfolge ist oder nicht – Vishal