Это 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
предназначен просто для отправки, делегирования и табулирования результатов. Есть несколько моделей, принимающих загрузки таким образом, следовательно, отдельный контроллер.