Pobranie i zwrócenie wartości z inputa

Cześć, chcę pobrać wartość inputa i wyświetlić ją w linku po kliknięciu buttona.
Tak wygląda kontroler:

class HomeController < ApplicationController
      def index
      	@form = ''
      	@number = params[:tracking_number].inspect
      	@link = 'https://inpost.pl/sledzenie-przesylek?number=' + @number.to_s
      end
    end

I widok:

<%= simple_form_for @form, url: @link do|f| %>
  <%= f.input :tracking_number, label:false, placeholder: 'Your tracking number for InPost' %>
  <%= f.button :submit, 'Search for shipment' %>
<% end %>

Dlaczego w miejsze zmiennej: @number wstawiany jest nil? Co zrobiłem źle?

simple_form Ci pewnie wrapuje w coś parametry, ale nie wiem w co dla pustego stringa, wyputsuj sobie paramsy (puts params gdzieś w Twoim index) i sprawdź logi, jak nie dostaniesz parametrów to zamiast @form = '' zrób <%= simple_form_for :stuff, url: @link %> i swój parametr dostaniesz w params[:stuff][:tracking_number]

wogle to jak masz taki prosty formularz i nie potrzebujesz wrzucać do niego danych z modelu, korzystać z automatycznych ścieżek, podłączać automatycznego pokazywania errorów zmapowanych do inputów i potrzebujesz przekazać z jeden parametr to poleciłbym Ci sobie napisać najprostszego inputa w czystym HTML’u (+ pewnie CSRF token)

i przyzwyczaj się do interpolacji zamiast konkatenacji, chyba, że serio masz dobry powód żeby konkatenować
(@link = "https://lalala.pl?number=#{number}")

muszę uciekać, potem pogadamy

Rzuciłbyś byś okiem na projekt?
Projekt
Dlaczego otrzymuję nila? Twój sposób też nie pomaga.
Na przykład jak w linku wpiszę jakiś numer to działa bez problemu.

@inpost_link = “https://inpost.pl/sledzenie-przesylek?number=3123213123123123123

Problem jest z pobraniem numeru z inputa.

Renderujesz swój formularz raz, gdy wejdziesz na localhost:3000. Wtedy w akcji index w kontrolerze nie masz żadnych sensownych parametrów. Jeśli wejdziesz na localhost:3000?tracking_number=123, zobaczysz prawidłowy link (usuń .inspect z przypisania @number=).

Nie potrzebujesz mieć tego numeru w swoim backendzie, potrzebujesz jedynie zrobić dobry formularz który przekieruje Cię do strony z trackingiem. Tak wygląda sam znacznik form wygenerowany przez simple_forma:
<form novalidate="novalidate" class="simple_form " action="https://inpost.pl/sledzenie-przesylek?number=" accept-charset="UTF-8" method="post">
i kilka niepotrzebnych dla zewnętrznych serwisów rzeczy (authenticity token, name w submicie itp)

Masz pewnie ze 2 opcje:

  1. Dodać nową akcję do kontrolera (tracking_redirect), gdzie na podstawie paramsów zrobisz dobrego redirecta (overkill, ale nauczysz się o co chodzi z tymi parametrami ;>)

  2. Napisać dobry formularz, bez żadnych railsowych pomocników

Tutaj bez żadnej akcji do Twojego backendu przekierujesz po prostu użytkownika do dobrej strony (rozjedzie Ci się trochę widok, ale jak dodasz jakiegoś diva z jakąś dobrą klasą to będzie ok)

ponieważ

tracking_number

dotyczy się twojego forma na widoku
Robisz

simple_form for @form

i w blocku ma f.input
Możesz zrobiś albo input_tag albo number to params[’’][:tracking_number]