Загружать данные семени из YML в db с отношением один-ко-многим в Rails

Ты близок. Форматирование словаря параметров не выглядит корректным. Вы должны попробовать следующее:

let parameters: [String: AnyObject] = [
    "IdQuiz" : 102,
    "IdUser" : "iosclient",
    "User" : "iosclient",
    "List": [
        [
            "IdQuestion" : 5,
            "IdProposition": 2,
            "Time" : 32
        ],
        [
            "IdQuestion" : 4,
            "IdProposition": 3,
            "Time" : 9
        ]
    ]
]

Alamofire.request(.POST, "http://myserver.com", parameters: parameters, encoding: .JSON)
    .responseJSON { request, response, JSON, error in
        print(response)
        print(JSON)
        print(error)
    }

Надеюсь, что исправил вашу проблему. Если это не так, ответьте, и я соответствующим образом отрегулирую свой ответ.

0
задан Aldres 13 July 2018 в 22:49
поделиться

2 ответа

Как обсуждалось в чате, вам нужно использовать что-то вроде:

config[:projects].each do |project|
  todos = project[:todos]
  project.delete(:todos)
  new_project = Project.create(project)
  todos.each do |todo|
    new_project.todos.create(todo)
  end
end

. Предполагается, что ваш YML отформатирован правильно.

2
ответ дан jvillian 17 August 2018 в 12:06
поделиться
  • 1
    Нет необходимости итерации по проектам OR todos, а тем более и тем, и другим. @ Ответ robertoplancarte лучше – BM5k 14 July 2018 в 01:09
  • 2
    Нет необходимости итерации в любом обстоятельстве? Или в определенных обстоятельствах? Если последнее, то при какие обстоятельства итерации не нужны? – jvillian 14 July 2018 в 04:22
class Project < ApplicationRecord
  has_many :todos
  accepts_nested_attributes_for :todos
end

Project.create!(title: 'family', 
                todos_attributes:[{text:'1',isCompleted:false}, 
                                 {text:'2',isCompleted:false},...])

Если вы имеете , чтобы использовать YAML, вам нужно будет прочитать YAML, а затем превратить его в что-то, что рельсы могут создавать сущности из. Поместите это в файл семени:

yaml_hash = YAML.load(File.read('db/your_yaml.yaml'))

rails_arr_of_hashes = yaml_hash['projects'].map{|p| {title: p['title'], todos_attributes: p['todos'] }

Project.create(rails_arr_of_hashes)

поместить ваш YAML в db / your_yaml.yaml, а затем запустите

rails db:seed

Не забудьте добавить accepts_nested_attributes_for :todos в модель проекта.

Удачи в обучении Rails :)

2
ответ дан BM5k 17 August 2018 в 12:06
поделиться
  • 1
    Проблема в том, что я должен использовать YAML. И я не могу понять, как мне читать и преобразовывать этот файл в сущности. – Aldres 13 July 2018 в 23:42
  • 2
    это должно работать, если вы держите структуру YAML так, как она есть в вашем вопросе ... правильно отступом – robertoplancarte 13 July 2018 в 23:57
  • 3
    Выглядит логично. Но теперь есть что-то с типами. TypeError: no implicit conversion of String into Integer /Users/Aldres/Desktop/tasktracker/db/seeds.rb:10:in [] '/Users/Aldres/Desktop/tasktracker/db/seeds.rb:10:in <top (required)>' Строка 10 - rails_arr_of_hashes = yaml_hash['projects'].map{|p| {title: p['title'], todos_attributes: p['todos'] }} – Aldres 14 July 2018 в 00:01
  • 4
    Ах, мое плохое. Немного опечатки в моем YML-файле. Теперь все в порядке. Спасибо :) – Aldres 14 July 2018 в 00:17
  • 5
    Если вы не можете изменить имя клавиши todos в файле yaml, вы можете использовать gsub, чтобы изменить его на todos_attributes до , загружая файл как YAML вместо итерации по хэшу < я> после . YAML.load(File.read('projects.yml').gsub(/\:todos\:/, ':todos_attributes:')) – BM5k 14 July 2018 в 01:03
Другие вопросы по тегам:

Похожие вопросы: