2017-03-25 1 views
0

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> 
+1

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

Antwort

0

Sind Sie sicher, dass ist kein String? Versuchen

def importer  
    params[:role] == 'guardian' ? Guardian : Student 
end 
Verwandte Themen