Problem z simple form w oknie modalnym

Cześć!
Ucząć się rajlsów pracuję nad apkacją do tworzenia blogów, dzisiaj wpadłem na pomysł że fajnie by było zmienić jedną rzecz z którą mam teraz problem. Mianowicie: zalogowany użytkownik który nie utworzył jeszcze bloga miał w navbarze opcję “utwórz nowego bloga”, po kliknięciu przenosiło go na stronę z formularzem który zawierał nazwę bloga i przycisk create- prosta sprawa. Dzisiaj wpadłem na pomysł że chce by było to w postaci wyskakującego okna modalnego i tutaj pojawia się problem.

= simple_form_for blog do |f|
  = f.input :title
  = f.button :submit

Tak wygląda mój renderowany w oknie formularz, wcześniej po przeniesieniu na stronę /blog/new korzystaliśmy ze zmiennej blog właśnie z tego kontrolera więc wszystko łanie działało, teraz będąc np pod adresem /blog/1/posts nasz blog jest już pobrany z kontrolera dla postów, więc formularz zamiast być formularzem do tworzenia nowego bloga przez aktualnie zalogowanego użytkownika, jest formularzem do edycji nazwy aktualnie przeglądanego bloga. Wiem że mógłbym w każdym kontrolerze dopisać @blog_new i zrobić = simple_form_for @blog_new, ale takie rozwiązanie nie za bardzo mi się podoba, ponieważ zawsze po dodaniu nowego kontrolera trzeba by pamiętać o dodaniu zmiennej @new_blog. Próbowałem edytować ten formularz na wiele sposobów ale cały czas nie mogę sobie poradzić z tym jak odwołać się do zmiennej dla której ma być ów formularz. Z góry dziękuję za pomoc w rozwiązaniu problemu :smile:

A nie może być simple_form_for Blog.new ?

1 Like

Kurcze genialne, wszystko działa tak jak miało działać, jednakże nie bardzo rozumiem jak działa routing w tym przypadku skąd railsy wiedza że po przycisk submit ma się odwołąc zawsze do metody create kontrolera Blog ?

Sam nie wiem czy tak dokładnie jest, ale railsy chyba budują formularz w zależności od tego co obiekt, dla którego budujesz formularz odpowiada na new_record?. Blog.new.new_record? zwraca true, więc Railsy robią formularz z submitem do#create, w przypadku gdy budujesz formularz dla jakiegoś rekordu z bazy @blog.new_record? zwraca false, więc robią formularz z submitem do #update. Wydaje mi się, że to coś w tym stylu.

To rozumiem, bardziej mi chodziło o to że formularz wyświetlony pod adresem /blog/1/post/1 odnosi się -tak jak powiedziałeś- do metody create ale z kontrolera Blog mimo że żadna dodatkowa ścieżka mu tego nie wskazuje;) btw. dzięki wielkie za wcześniejsza odpowiedz!

To nieważne jaki jaki jest adres stronki na której wyświetla się formularz. Ważne jest co ma w action i method i w zależności od tego submit leci w dane miejsce. Podejrzyj źródło stronki z wygenerowanym formularzem i tam będziesz miał <form ... action='/blogs' method='post'>. Jak obejrzysz wynik rake routes to zobaczysz, że to kieruje do kontrolera Blogs i metody create.

1 Like