Mam pytanie, co to jest ten registration_path, nigdzie nie mogę znaleźć jak to jest tworzone. rake routes nie generuje takiego prefixu, jest m.in. user_registration, ale nie ma samego registration. Będę wdzięczny za podpowiedź.
Jeżeli w config/routes.rb masz wpisane devise_for :user to utworzone zostaną ścieżki z prefiksem user_
Metoda registration_path zwróci ścieżkę do rejestracji dla danego modelu.
Dlaczego tak to jest zrobione? Dlatego, że Devise pozwala na istnienie obok siebie kilku modeli użytkowników, np. User, Admin etc. Dzięki temu jak zrobisz registration_path('admin') to otrzymasz ścieżkę rejestracji dla admina, czyli inaczej admin_registration_path
Jak to jest tworzone możesz zobaczyć w źródłach Devise, konkretnie lib/devise/rails/routes.rb i lib/devise/controllers/url_helpers.rb
Jakoś dziwnie mi to działa.
Oryginalnie rake routes generuje dla rejestracji takie routsy:
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
Chciałem podmienić POST /users na POST /users/sign_up, żeby był taki sam adres jak przy wejściu na formularz rejestracji.
Poprzeglądałem trochę wiki devisowe i zorbiłem na razie coś takiego w routes.rb:
devise_for :users, skip: :registrations
as :user do
post '/users/sign_up' => 'devise/registrations#create', as: 'user_registration'
get '/users/sign_up'=> 'devise/registrations#new', as: 'new_user_registration'
end
Niby w rake routes teraz ładnie mi generuje:
user_registration POST /users/sign_up(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
Ale już jak testuję formularz rejestracji, zostawiam puste pola, klikam submit to wygląda na to, że dalej leci na /users i wywala mi błąd: No route matches [POST] "/users".Czyli tak jakby to registration_path dalej generowało mi /users zamiast nowy user_registration czyli /users/sign_up. Wiecie może o co chodzi?