2013-06-14 14 views
6

Mam model Accounts skonfigurowany z Devise. Devise używa kilku atrybutów (takich jak email, hasło itp.), Ale mam kilka innych atrybutów, które stworzyłem. Po zarejestrowaniu chciałbym ustawić je w pewien sposób.Rozszerzenie kontrolera rejestrowania rozszerzeń

Jak mogę rozszerzyć kontroler rejestracji? Rozumiem, że trzeba rzeczywiście stworzyć nowy kontroler takiego:

class AccountsController < Devise::RegistrationController 
    def create 
    super 
    end 
end 

Mogę tylko dodać mój kod zaraz po super? Myślę, że byłoby już za późno, bo zasoby zostałyby już zapisane. Jaki jest najlepszy sposób na zrobienie tego?

Gdybym miał pisać od zera, to skąd miałbym wiedzieć, że nie umknęło mi nic, co zrobił Devise?

Dzięki,

Odpowiedz

2

Jeśli chcą przepisać kontroler od zera do pełnej kontroli, zacznij registration_controller.rb Source Code i dokonać zmian w razie potrzeby.

powiem opracować w użyciu kontroler niestandardowego jest tak proste, jak zmiana trasy:

devise_for :users, :controllers => { :registrations => "users/custom_controller" } 
+0

Czy to najlepszy sposób na jego przedłużenie? To tylko dwa atrybuty, które muszę dodać. Co powiesz Devise'owi, że mam nowy kontroler (tak, że nie używa on tego w klejnocie)? – darksky

+0

@ Darksky Best? Nie jestem do końca pewien. Możesz spróbować i zobaczyć, jak to jest "brudne".Zaktualizowałem swoją odpowiedź z wyjaśnieniem na temat opracowania nowego kontrolera. – Josh

+0

co, jeśli chcę tylko przesłonić, nie odtwarzając tego wszystkiego - jak to zrobić? – BKSpurgeon

0

Jeśli chcesz polami dla użytkownika dostarczonej informacji nie ma potrzeby rozszerzania kontrolera.
Jeśli chcesz dodać je automatycznie, nie ma powodu, aby nie zrobić tego w modelu! (Chyba, że ​​to zależy od sesji lub żądanie)

w 1 przypadku, patrz https://github.com/plataformatec/devise#configuring-views

należy zmienić kontroler opracować TYLKO jeśli zamierza zmieniać przepływ rejestracji.

+0

Ale robienie 'before_save' i wywoływanie metody, która ustawia pewne wartości w breakach modelu, devise and sign up nie działa poprawnie. – darksky

+0

Jaki błąd dostałeś? –

+0

Nie pozwolił mi się zalogować i zarejestrować przekierowany na stronę główną (bez uwierzytelniania użytkownika i przekazywania). W efekcie ustawiłem domyślne wartości w bazie danych. – darksky

9

Zgodnie z Devise documentation, tak, podobnie jak odpowiedź Josha, można zmienić kontroler. Chociaż nie musisz zaczynać od zera. Zapoznaj się z dokumentacją.

Można wygenerować kontroler, dzięki czemu są w stanie dodać dostosowań:

Example: rails generate devise:controllers [scope] 

Więc można uruchomić po za zakresem użytkowników:

rails generate devise:controllers users 

Daje to kontrolerami folder znajduje się tutaj: aplikacja/kontrolery/użytkownicy

Następnie, powiedz swój plik tras do użyj tego kontrolera. Zaktualizuj swoją trasę, aby wyglądała następująco:

devise_for :users, controllers: { sessions: "users/sessions" } 

I na koniec skopiuj wszystkie widoki. Jeśli jeszcze nie zdobyłeś tych wyświetleń, musisz to zrobić. Sterownik się zmienił, więc twoje poglądy również będą musiały być.