2016-11-04 2 views
0

мои PARAMS Понравилосьвложенные атрибуты превосходят импорт в рельсах 4

params.require(:subject).permit(:id, :org_id, :subject_id, :subject_name, :subject_desc, 
          :subject_color, subject_modules_attributes: [:id, :subject_module_id, :subject_id, 
          :module_number, :module_name, :_destroy, 
          module_details_attributes: [:id, :module_detail_id, :subject_module_id, 
          :module_detail_number, :description, :_destroy]]) 

Я хочу, чтобы сохранить данные в 3 таблицы путем импорта одного файла Excel. Как можно с помощью ЕГО Gem

def self.import(file) 
    allowed_attributes = ["org_id", "subject_name", "subject_desc","subject_color", 
          subject_modules_attributes: ["org_id", "standard_id", "subject_id", "module_number", "module_name"], 
          module_details_attributes: ["subject_module_id", "module_detail_number", "description"]] 
    Spreadsheet.client_encoding = 'UTF-8' 
    spreadsheet = open_spreadsheet(file) 
    header = spreadsheet.row(1) 
    (2..spreadsheet.last_row).each do |i| 
     row = Hash[[header, spreadsheet.row(i)].transpose] 
     subject = new 
     subject.attributes = row.to_hash.slice(*allowed_attributes) 
     subject.save! 
    end 
end 

Я сохранил данные первой таблицы, но в вложенных параметрах не удался сохранить 2-й и 3-й таблицы как subject_modules и module_details. Как я могу изменить свой код, чтобы получить решение ..

ответ

0

Я просто изменить свои коды и дать создать метод для каждой таблицы, как,

@subject = Subject.create(my fields...) 
@sub_mod = SubjectModule.create(my fields...) 
@mod_det = ModuleDetail.create(my fields...) 

и указать столбец таблицы для соответствующих полей.
Спасибо.

Смежные вопросы