Ruby Sinatra Загрузить форму params нарушено - PullRequest
0 голосов
/ 28 июня 2018

При отправке формы в Синатре у меня появляется следующая ошибка:

App 40327 output: 2018-06-28 02:59:17 - NoMethodError - undefined method `[]' for nil:NilClass:
App 40327 output:   /Library/WebServer/Documents/blammo/routes/publish.rb:87:in `block in <class:MyApp>'

Форма представляет собой форму загрузки файла и одно текстовое поле. Просто. Файл проходит, как и текстовое поле. Они оба захвачены просто отлично.

Я отправляю params методу, который в конечном итоге отвечает за генерацию ошибки в следующей строке внизу страницы:

fname = params[:s_single_file_upload][:filename]

Рассматриваемый метод возвращает штрафа с логическим значением. Я переписал это несколькими способами и выбросил все, что могло бы сбить с толку то, что я незнакомый с

Таким образом, params испорчен, если вызывается упомянутый выше метод. Таким образом, имя не может быть назначено. Я ожидаю, что params будет целым на данный момент в коде. Есть ли какое-нибудь разрушение, если params внимательно изучены до этого момента? На другом языке я видел params уничтоженным так или иначе по какой-то причине, но я не уверен насчет Ruby.

Я не нахожу nil: NilClass, но это именно то, что он сообщает. Вот триггер этого метода:

result = Alpha::rf_alpha_sniff(params)

и модуль :: метод:

module Alpha

  def self.rf_alpha_sniff(incoming)
    qualifiers = %w(alpha bravo charlie delta echo foxtrot)
    incoming.delete('captures')
    incoming.delete('splat')            # take out Mustermann's 'captures' and 'splat'
    incoming.delete('s_single_file_upload')         # non-perusal 'single_file_upload'    
    incoming.values.each do |item|
      item = item.gsub(" ","_")
      Dev::hq_log("item: #{ qualifiers.include?(item.downcase) }")
      return true if qualifiers.include?(item.downcase)
    end
    return false
  end

end

Таким образом, страница прогрессирует нормально без этого метода. Когда метод вызывается каким-либо образом, params, кажется, облажался, так что файл в значительной степени ушел.

Как этот метод взаимодействует с params, так что он недоступен в дальнейшем по сценарию? Я ожидаю, что это будет полностью доступно везде.

1 Ответ

0 голосов
/ 28 июня 2018

Оказывается, использование incoming.delete удаляло элементы из хеша params, так как это была ссылка на оригинал, вместо использования копии.

Итак, я должен скопировать params, используя params.dup (дубликат), чтобы они не были одним и тем же объектом.

Просмотр метода пост-тестирования params показал, что объекты действительно были удалены. Еще один решен.

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