Wykonanie metody z kontrolera po nacisnieciu przycisku w index

Mam taki przycisk który bezpośrednio odwołuje się do mojej metody w kontrolerze:

index.html.erb
<%= button_to "# button #" ,controller.remove_all %>

kontroler:
def remove_all Report.destroy_all end
Jak widać chce usunąć wszystkie rekordy, ale chcę to zrobić dopiero po wciśnięciu przycisku ‘button’, a nie w momencie kiedy odświeżę stronę, dodam nowe rekordy itp.

Mam nadzieję, że jasno opisałem problem :]

To tak nie działa. Wciśnięcie buttona musi wykonać request który wywoła akcje w controllerze, poczytaj. Nie można tego zrobić bezpośrednio.

chodzi tobie o config/routes.rb i odpowiednie przekierowanie?

Tak, zamiast controller.remove_all powinieneś mieć link do tej akcji.

<%= button_to "# button #", remove_all_articles_path %>

(zakładając, że masz odpowiedni wpis w routes i wygenerowało Ci taki helper)

Co do routes, mam tak owe stworzone:
resources :reports do collection do post :import # zwiazane z inna metoda post :remove_all end end
Teraz tak jeśli korzystam z zapisu
controller.remove_all to wpis w routes jest “nie ważny” tzn mogę go zakomentować i tak będzie działać tj usuwać.
Mogę dodać helper sam w kontolerze czyli:

  1. w index
    <%= button_to "# button #" remove_all %>
  2. w kontolerze
    helper_method :remove_all
    Ciągle jednak nie rozwiązuje to mojego problemu.

@radwo i ja napisaliśmy co masz zrobić. Musisz do helper button_to przekazać adres akcji a Ty dalej uparcie próbujesz wywołać ją bezpośrednio w widoku.

<%= button_to "# button #", "adres_do_akcji_usuwającej_raporty" %>

Teraz tak jeśli korzystam z zapisu
controller.remove_all to wpis w routes jest “nie ważny” tzn mogę go zakomentować i tak będzie działać tj usuwać.

Oczywiście, że tak. Bo akcja to najzwyklejsza metoda w kontrolerze. Wpis w routes nie jest konieczny, ale pomocny bo wygeneruje Ci helper. Na upartego możesz sobie ręcznie składać ścieżki, ale nie jest to dobrą praktyką.

Proponuję byś wrzucił projekt (albo chociaż odseparowany problem) do repo.

Zrozumiałem i poprawiłem, teraz działa. Dzięki!!