Rails 5. Как использовать контроллер загрузки для обработки массовых загрузок путем отправки каждой записи - PullRequest
0 голосов
/ 02 июля 2018

Это Rails 5 с Mongoid.

У меня есть структура MVC для балансировщиков нагрузки. Модель и контроллер выполняют всю проверку и дезинфекцию, которые я хочу и нуждаюсь. Однако я хочу иметь возможность отправлять массив структур данных балансировщика на контроллер upload, который проверит загрузку в правильном формате, а затем перебирает массив, отправляющий на контроллер balancers для проверки, вставки или добавьте каждую запись по мере необходимости - и накапливайте статистику, чтобы в конце итерации я мог произвести HTML или JSON-рендеринг подсчета успеха и подробных ошибок.

Я почти уверен, что мне нужно поменять структуру params как часть каждой итерации / отправки, но неясно, как или я хочу использовать #new, *1009*, #create, #update, #save, или какой метод для того, чтобы проверка работала, а вставка / вставка выполнялась правильно.

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

Спасибо! (Есть несколько других моделей / контроллеров, которые я хочу показать здесь; корпус балансира - только пример.)

У меня сортировка сбит сбор статистической сводки, но у меня возникают проблемы с отправкой на контроллер balancers, чтобы фактически обновить базу данных чем-либо, кроме nil.

[редактировать]

Вот простой пример модели:

class Puppet::Dbhost

  include ::PerceptSys
  include Mongoid::Document
  include Mongoid::Timestamps

  validates(:pdbfqdn,
            :presence   => true)

  field(:pdbfqdn,
        :type       => String)
  field(:active,
        :type       => Mongoid::Boolean)
  field(:phases,
        :type       => Array)

  index(
    {
      :pdbfqdn      => 1,
    },
    {
      :unique       => true,
      :name         => 'dbhosts_pdbfqdn',
    }
  )

end                             # class Puppet::Dbhost

Контроллер uploads имеет маршрут post('/uploads/puppet/dbhosts(.:format)', :id => 'puppet_dbhosts', :to => 'uploads#upload').

Документ, содержащий информацию для загрузки, выглядит следующим образом:

{
  "puppet_dbhosts" : [
    {
      "pdbfqdn" : "some-fqdn",
      "active" : true
    }
  ]
}

Метод uploads#upload проверяет основной синтаксис документа, а затем я застреваю. Я пробовал

before_action(:upload, :set_upload_list)
def set_upload_list
  params.require(:puppet_dbhosts)
end

def upload
  reclist = params.delete(:puppet_dbhosts)
  reclist.each do |dbhrec|
    params[:puppet_dbhost] = dbhrec
    dbhost = Puppet::Dbhost.new
    dbhost.update
  end
end

Очень широкими мазками. Логика проверки записи puppet_dbhost встроена в модель и контроллер; Контроллер uploads предназначен просто для отправки, делегирования и табулирования результатов. Есть несколько моделей, принимающих загрузки таким образом, следовательно, отдельный контроллер.

1 Ответ

0 голосов
/ 03 июля 2018

Ну, я чувствую себя отстраненным. Очевидно, правильный путь - абстрагировать общие методы загрузки и логику в отдельный модуль и смешать его. Маршруты можно настраивать. Таким образом, нет необходимости для контролеров знать о внутренностях других для этого сценария. Спасибо за подсказку!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...