Błąd: undefined method `members_path'

Przy próbie utworzenia formularza w akcji new dostaje błąd:
undefined method `members_path’

Moje pliki:
Kontroler (auth_controller.rb)

[code]class AuthController < ApplicationController
def index
end

def new
@member = Member.new
end
def create
# …
end
end[/code]
Model (member.rb)

class Member < ActiveRecord::Base end
Widok (new.html.erb)

<% form_for @member do |f| %> <%= f.text_field :login %> <%= f.submit %> <% end %>
Routes

#... resources :auth #...
Co może być przyczyną takiego błędu ?

Dodaj do routes jeszcze “resources :members” - nie masz tego wpisu, więc nie ma też helperów do niego.

Działa :slight_smile: Zastanawiam się czy w ogole nie zrezygnować z kontrolera ‘auth’ i umieścić wszystkie akcje związane z autoryzacją użytkownika w kontrolerze members.

Zdecydowanie autentykacja i rejestracja to 2 różne rzeczy więc nie należy ich mieszać ze sobą w 1 kontrolerze

A jakbyś chciał mieć wszystko ładnie DRY to użyj Devise: http://github.com/plataformatec/devise

Po przeanalizowaniu kilku projektów, myślę że kwestię autoryzacji oraz obsługi użytkowników rozwiążę w ten sposób:
W kontrolerze “SessionController” umieszczę akcję odpowiedzialne za logowanie oraz wylogowanie użytkownika.
Natomiast kontroler “MembersController” posłuży do obsługi rejestracji, zmiany danych konta oraz innych akcji związanych z zalogowanym użytkownikiem serwisu.

Jak na razie jestem w fazie poznawania Railsów, dlatego każdy element chciałbym utworzyć samodzielnie bez korzystania z gotowych rozwiązań jak np. OAuth itp… :slight_smile:

To weź restful_authentication – ten plugin wygeneruje Ci kod w katalogu aplikacji, bardzo dobry punkt wyjścia do własnych dalszych eksperymentów :slight_smile:

Jak już się pobawisz, zrozumiesz i dojrzejesz do tego, że zarządzanie użytkownikami jest trudne (rejestracja, potwierdzanie mailowe rejestracji, resetowanie/przypominanie hasła, logowanie przez jednorazowy token, zapisywanie czasu i IP logowania) i nie warto za każdym razem pisać tego kodu od zera – wtedy godny polecenia jest Devise :slight_smile:

OAuth nie ma nic wspólnego z gotowymi rozwiązaniami do autentykacji, poczytaj co to naprawdę jest :wink:

Nie mogę zrozumieć, dlaczego będąć pod adresem ‘/sessions/new’ i wysłaniu formularza pod tą samą akcją. Dostaje błąd:
No route matches “/sessions/new”

Do pliku routes.rb dopisałem

resources :sessions

Następnie utworzenie formularza w widoku akcji ‘new’:

<% form_for :sessions do |f| %> Login: <%= f.text_field :login %><br /> Hasło: <%= f.password_field :password %><br /> <%= f.submit "Zaloguj się" %> <% end %>
Przed wysłaniem formularza jest ok, po wysłaniu na ten sam adres dostaje błąd. :confused:
Myślałem że powyższy wpis w routes.rb załatwi sprawę.

Formularze są wysyłane do akcji create kontrolera, ścieżka /sessions
(tzn. railsy na podstawie tego, że jest to żądanie POST do ścieżki /sessions wywołują metodę create kontrolera)
Poczytaj o resource’ach i REST w Rails :slight_smile:

BTW, no route matches /sessions/new, bo kontroler akcję new wywołuje tylko przy żądaniu GET /sessions/new (a Ty próbujesz zrobić POST /sessions/new)