Неверное количество аргументов рельсы не передадут аргумент методу - PullRequest
1 голос
/ 17 апреля 2020

Я очень новичок в мире рельсов, и я пытаюсь создать приложение для отслеживания посылок. Я хочу иметь возможность передать номер отслеживания пакета методу rails, который я создал, чтобы очистить сайт перевозчика.

Я получаю неправильное количество аргументов и не понимаю, почему. Любой вклад приветствуется!

rout.rb

Rails.application.routes.draw do
  resources :packages do
    match '/scrape', to: 'packages#scrape', via: :post, on: :collection
  end
  root 'home#index'

  get 'dashboard' => 'packages#index'
  get '/logout' => 'auth0#logout'
  get 'auth/auth0', as: 'authentication'
  get 'auth/auth0/callback' => 'auth0#callback'
  get 'auth/failure' => 'auth0#failure'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

метод очистки

def scrape(tracking_num)
    require 'watir'
    url = "https://www.ups.com/track?loc=en_US&tracknum=#{tracking_num}&requester=WT/trackdetails"
    b = Watir::Browser.new :chrome, headless: true
    b.goto(url)
    text = b.p(:class, 'ups-txt_size_double_lg').when_present.text
    flash.now[:notice] = text
 end

button_to

<%= button_to 'Track', scrape_packages_path(tracking_num: package.tracking), class: "btn btn-sm btn-outline-dark" %>

1 Ответ

0 голосов
/ 17 апреля 2020

POST-запрос и действие не используются, как вы написали. Сначала я отвечу на ваш прямой вопрос: действия в контроллере вызываются без аргументов. def scrape(tracking_num) ожидает вызова с одним аргументом, поэтому возникает ошибка.

Вот модификации:

Rails.application.routes.draw do
  resources :packages do
    # you can use 'post' directly
    post '/scrape', to: 'packages#scrape', on: :collection
  end
end
  # remove the parameters of method and use params[:tracking_num] to get it
  def scrape
    require 'watir'
    url = "https://www.ups.com/track?loc=en_US&tracknum=#{params[:tracking_num]}&requester=WT/trackdetails"
    b = Watir::Browser.new :chrome, headless: true
    b.goto(url)
    text = b.p(:class, 'ups-txt_size_double_lg').when_present.text
    flash.now[:notice] = text
  end
# add { remote: true, method: :post } to the link
<%= link_to 'Track', scrape_packages_path(tracking_num: package.tracking), class: "btn btn-sm btn-outline-dark", method: :post, remote: true %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...