ошибка неопределенного метода в вызове метода нажатием кнопки начальной загрузки на индексной странице Rails 4

Мне нужно вызвать метод download_images("\folder","http:\url"), который сохраняет изображения с URL-адреса в выбранном каталоге. Этот метод следует вызывать в index.html.erb и получать адрес папки из textbox1 и URL-адрес из textbox2 после нажав кнопку 1.


Прямо сейчас я не знаю, как получить строки из текстовых полей, я пытаюсь правильно вызвать метод Код index.html.erb:

<h1>Welcome#index</h1>

<p><%=  "Download pictures from url!" %></p>
   
<div class="form-horizontal">
  <p> Input url: </p>
  <p> <input type="text"/> </p>
  <p> Input destination folder: </p>
  <p> <input type="text"/> </p>
    <button class="btn">Go!</button>
  <% button_to "btn", :method=> download_images("`/tutorial1/downloadedpics","http://www.yandex.ru/") %>
</div>


Я определил метод download_images в файле welcome_controller.rb:

class WelcomeController < ApplicationController
  def index
  end

  def download_images(url, destination_path, options = {})
    base_url = URI.join(url, "/").to_s
    body = Typhoeus::Request.get(url).body
    imgs = Nokogiri::HTML(body).css("img")
    image_srcs = imgs.map { |img| img["src"] }.compact.uniq

    hydra = Typhoeus::Hydra.new(:max_concurrency => options[:max_concurrency] || 50)
    image_paths = image_srcs.map do |image_src|
      image_url = URI.join(base_url, image_src).to_s
      path = File.join(destination_path, File.basename(image_url))
      request = Typhoeus::Request.new(image_url)
      request.on_complete { |response| File.write(path, response.body) }
      hydra.queue(request)
      path
    end
    hydra.run
    image_paths
  end

  
end

После переключения сервера и перехода на локальный хост получаю исключение: NoMethodError in Welcome#index, undefined method download_images' for #<#<Class:0x007f202fc3ae50>:0x007f202f9ab518>, in line <% button_to "btn", :method=> download_images("/tutorial1/downloadedpics","http://www.yandex.ru/") %>

Я нуб-программист, поэтому могу делать довольно глупые ошибки... И важно отметить: я работаю в веб-боксе Nitrous и толком не знаю, можно ли загружать изображения в папку бокса:

~/tutorial1/downloadedpics

Также я использую контроллеры Bootstrap, гем Nokogiri и гем Typhoeus.
Версия Ruby:ruby 2.1.1p76 Версия Rails:Rails 4.1.0 Спасибо за внимание.


person Арсений Плаксин    schedule 07.11.2014    source источник


Ответы (1)


Как FYI, делая:

imgs = Nokogiri::HTML(body).css("img")
image_srcs = imgs.map { |img| img["src"] }.compact.uniq

это неправильный способ поиска изображений с параметрами "src". Поскольку вы ищете неправильно, вы получаете нули в результирующем массиве, заставляя вас использовать compact. Вместо этого не полагайтесь на уборку после создания беспорядка, просто избегайте беспорядка в первую очередь:

require 'nokogiri'

body = <<EOT
<html>
<body>
  <img>
  <img src="foo">
</body>
</html>
EOT

imgs = Nokogiri::HTML(body).css("img[@src]")
image_srcs = imgs.map { |img| img["src"] }
image_srcs # => ["foo"]
person the Tin Man    schedule 07.11.2014