Witam,
Pytanie: Prosze o Wasze sugestie jak stosować Modele (np. User) w kontrolerach z przestrzenią nazwa (np. Admin:UserController) - potrzebne do panelu admina
mam pewien problem, który dotyczy bardziej pomysłu na zrobienie panelu admina katalogu admin.
Tworze aplikacje w RoR, która ma być forum internetowym zarządzalnym z konkretnym panelem admina. Pomyślałem, że dla dla usera z rolą admina czy moderatora można funkcje administratorskie typu ‘usun, edytuj, zablokuj’ itd. wrzucić normalnie na frontend, oczywiscie metody dostepne tylko po zatwierdzniu auoryzacji admina.
Przydałby się jednak jeszcze backend, panel admina (inny layout, dodawanie userow, ostrzezenia, przenoszenie tematow - wszystkie te funkcjonalnosci, ktore raczej ciezko zmiescic na froncie). Zacząłem więc używac katalogu admin/ i przestrzeni nazw dla kontrolerów. Wszystko ładnie działało, dopóki nie napotkałem na błąd, który okazał błędem wewnętrznym.
Mianowicie… Uzywam załózmy controllera Admin::UserController < Admin::BaseController , Base kontroller dziedziczy po Application. Czyli standardowe użycie. Teraz pierwsze co zrobilem, to zastosowalem generator rusztowania. Wszystko ladnie mi powstało, w katalogach jak powinno sie znajdować. Tylko, że ja już mam model dla Userów, zatem nie potrzebuje Admin::User. W kontrolerze Admin::UserController zamieniam modele z Admin::User na User. Wydaje się, że wszystko ładnie będzie działać. Do routingu dla admina używałem tego:
map.namespace(:admin) do |admin| admin.resources :photos, :has_many => { :tags, :ratings} end
. Później nawet juz probowalem tak, jak polecał @radarek
[code]Kod: ruby
-
generowanie:
-
./script/generate controller ‘admin/products’
-
usuwanie
-
./script/generate controller ‘admin/products’
-
przekierowanie
-
redirect_to :controller => ‘admin/products’, :action => ‘list’
-
named routes
-
routes.rb
-
map.admin_products ‘admin/products/:action/:id’, :controller => ‘admin/products’
-
wygenerowane metody
-
admin_products_path
-
admin_products_url
-
itp[/code]
Jednak jest problem przy <%= form_for(@user) … %> Rusztowanie samo tworzy sobie redirecty, linki przy pomocy obiektu modelu @user. Z racji, ze uzywam kontrollera Admin:userController to form_for sam generuje przy wysłaniu posta params[:admin_user] a nie params[:user]. Tutaj kiedy chce odebrac params[:user] to krzyczy ze jest nil.
Zatem probowalem dalej. Skoro Admin::UserController tak bardzo sie domaga tego, zatem wrocilem do uzywania modeli z przestenia nazw. W modelu Admin::User zrobilem dziedziczenie z User (nie potrzbuje tabeli admin_users
w bazie). Ładnie wszystko idzie, do momentu wysłania posta z formularza /new.erb. Wtedy mam błąd o jakims przeładowaniu metod w stacku, czy cos takiego. Ogólnie pluje się o to, ze dziedzicze… Znalazlem opis na jakim zagr blogu. Gosciu tlumaczyl, ze mozna spokonie zrobic <%= form_for @user.becomes(User)… %> czyli cos a’la zrzutowanie obiektu do User. Tylko, ze wtedy psuje mi sie caly routing (linki). Opisał to jako wew problem, ktory bedzie naprawiony w v. 2.4 . Mam z tym ciągłe problemy, bo co chwila coś się wysypuje. Macie jakiś pomysł na obejscie tego?
Nie da sie tego ogranąć normalnie?
Moje prosby i pytania:
W jaki sposob to shackować?
Może ktoś z Was robił coś takiego kiedyś i z doświadczenia wie, ze inne rozwiązanie jest lepsze. Może jakoś inaczej rozwiązać ten problem. Wiem, ze moge tez olać namespace’y i tworzyc tak, jak opisane jest tu: http://www.caboo.se/articles/2006/07/01/if-your-models-arent-namespaced-why-should-your-controllers-be-or-how-i-learned-to-stop-worrying-and-love-the-crud , ale mimo wszystko fajnie byłoby mieć ten panel admina oddzielnie
Pozdrawiam i czekam na odp.