Dodałem pole do formularza rejestracji, które jest oparte na innym modelu, zobacz Jak używać zagnieżdżonych atrybutów w modelu opracowania dla szczegółów krwawych. Ta część działa dobrze.
Problem polega teraz na tym, że gdy zapisuję, to nie udaje się utworzyć akcji kontrolera rejestracji, który jest dostarczany przez devise z Activerecord::UnknownAttributeError
na tym polu (firma).
Zakładam, że muszę zastąpić kontroler rejestracji, czy jest lepszy / łatwiejszy sposób, w jaki powinienem do tego podejść?
ruby-on-rails
devise
Craig McGuff
źródło
źródło
Odpowiedzi:
Czy w swojej formie przekazujesz jakieś inne atrybuty, poprzez przypisanie masy, które nie należą do twojego modelu użytkownika lub któregokolwiek z zagnieżdżonych modeli?
Jeśli tak, uważam, że w tym przypadku wyzwalany jest ActiveRecord :: UnknownAttributeError.
W przeciwnym razie myślę, że możesz po prostu stworzyć własny kontroler, generując coś takiego:
A następnie powiedz devise, aby używał tego kontrolera zamiast domyślnego z:
źródło
rails generate devise:views
a w Rails 2 (tak myślę) to:script/generate devise:views
paths.app.views << "app/views/devise"
w twojejconfig/application.rb
.Lepszy i bardziej zorganizowany sposób zastępowania kontrolerów i widoków Devise przy użyciu przestrzeni nazw:
Utwórz następujące foldery:
Umieść wszystkie kontrolery, które chcesz zastąpić, w app / controllers / my_devise i dodaj
MyDevise
przestrzeń nazw do nazw klas kontrolerów.Registrations
przykład:Zmień odpowiednio swoje trasy:
Skopiuj wszystkie wymagane widoki
app/views/my_devise
z folderu Opracuj klejnot lub użyjrails generate devise:views
, usuń widoki, których nie zastępujesz, i zmień nazwędevise
folderumy_devise
.W ten sposób uporządkujesz wszystko w dwóch folderach.
źródło
create
metodzie Devise's, którą nadpisałem. Mój zmodyfikowany przeze mnie kontroler rusztowania działa świetnie, ale jak sprawić, by działał zresource
biznesem Devise ?MyDevise::RegistrationsController < Devise::RegistrationsController
tworzy błąd zależności cyklicznej. czy robię coś źle?Uważam, że istnieje lepsze rozwiązanie niż przepisanie RegistrationsController. Zrobiłem dokładnie to samo (po prostu mam Organizację zamiast Firmy).
Jeśli poprawnie ustawisz swoją formę zagnieżdżoną, na poziomie modelu i widoku, wszystko działa jak urok.
Model mojego użytkownika:
Model mojej organizacji:
Mój pogląd: „devise / registrations / new.html.erb”
źródło
resource
w widoku zamiast zmiennej instancji klasy@resource
?Możesz generować widoki i kontrolery w celu opracowania dostosowań.
Posługiwać się
i
Skopiuje określone kontrolery i widoki z gem do twojej aplikacji.
Następnie powiedz routerowi, aby używał tego kontrolera:
źródło
Bardzo proste metody Wystarczy przejść do terminala i wpisać następujący typ
Następnie użyj niestandardowych widoków
teraz w pliku route.rb
Możesz także dodać inne kontrolery. Umożliwi to użycie kontrolerów w folderze użytkowników i widoków w folderze użytkowników.
Teraz możesz dostosować swoje widoki do swoich potrzeb i dodać swoją logikę do kontrolerów w folderze kontrolery / użytkownicy. Cieszyć się !
źródło