2012-03-20 10 views
6

Jak mogę rootować do widoku show bieżącego użytkownika w aplikacji Rails?Jak rootować do widoku show bieżącego użytkownika w Railsach?

chcę zrobić coś podobnego

authenticated :user do 
    root :to => "users#show" 
end 

ale jak mam przekazać identyfikator bieżącego użytkownika do tego?

Dzięki

+2

pewnością jest bardziej seksownego sposób to zrobić w Rails 4+ niż to, co jest sugerowane. –

Odpowiedz

4

Następujące pracował dla mnie.

W routes.rb:

root to: 'users#current_user_home' 

W users_controller.rb:

def current_user_home 
    redirect_to current_user 
end 
1

Czy zawsze „prąd” użytkownik lub dowolny arbitralny użytkownik?

Jeśli jest obecny użytkownik, po prostu skierować je wszystkie do tej samej strony (bez określenia tożsamości) oraz w działania kontrolera uzyskać bieżącego użytkownika (z sesji itp) i przekazać je aż do widzenia.

+0

Cześć Michael, widzę, co mówisz, ale myślę, że się mylę, ponieważ moja sytuacja jest trochę bardziej złożona. Wdzięczni, jeśli jesteście w stanie mi pomóc to przemyśleć. Rootem dla bieżącego użytkownika powinien być użytkownik/show z bieżącym identyfikatorem użytkownika. Użytkownicy powinni mieć możliwość zobaczenia własnego widoku pokazu i nikt się nie wybiera. W tym przypadku mógłbym zmodyfikować kontroler show na '@user = current_user'. ALE, mam również model administratora, a administratorzy mogą wyświetlać widoki wszystkich użytkowników. Jaki jest najlepszy sposób, aby sobie z tym poradzić? Z warunkowaniem w kontrolerze show lub innym podejściu? Dzięki za twoje myśli. –

0

Bieżący identyfikator użytkownika nie powinien znajdować się w url, który powinien być przechowywany w sesji. Nie musisz więc przekazywać go na trasę.

Edit: Po przeczytaniu Twojego komentarza, myślę, że można określić kolejną akcję jak profile na wystawie obecny widzenia użytkownika.

Albo w swoim działaniu users/show, dodać trochę kodu, takich jak:

if current_user.is_admin? 
    @user = User.find params[:id] 
else 
    @user = current_user 
end 
+0

dziękuje Xdazz, rozumiem co masz na myśli, ale nadal mam problemy z wyświetlaniem widoku programu. Zobacz mój komentarz do MIchael poniżej dla nieco więcej szczegółów. Byłbym wdzięczny za wszelkie wskazówki. –

+0

@AndyHarvey Zobacz moją edycję. – xdazz

+0

Dzięki xdazz, rozważałem twoje drugie rozwiązanie. Ale w mojej sytuacji bieżący użytkownik może zobaczyć linki do profili innych użytkowników. Obecnie, jeśli klikną te linki, otrzymają błąd autoryzacji. Jeśli ustawię @ user = current_user, kliknięcie linków do innych użytkowników spowoduje zrootowanie do bieżącego profilu użytkownika, co byłoby dziwne. Działanie profilu może działać, chociaż miałem nadzieję, że będzie prostszy sposób. Spróbuję. –

8

Zrobiłem before_filter gdzie mogę sprawdzić, czy request.path == root_path a jeśli tak przekierować do ścieżki, która powinna być korzeń konkretnego użytkownika. Ścieżka root_path w routes.rb nie jest korzeniem użytkownika dla dowolnego użytkownika, więc nie ma nieskończonego przekierowania. Po prostu wykonaj flash.keep, aby Twoje wiadomości flash przetrwały przekierowanie.

EDIT: Reading Q & A i komentarze, próbując zrozumieć, co już ma, i to, co trzeba jeszcze. Czy udało Ci się skonfigurować routing, aby uzyskać działanie show renderowane bez adresu URL w postaci :id? Jeśli tak, być może trzeba coś takiego w swoim działaniu kontroler show:

if params[:id].nil? # if there is no user id in params, show current one 
    @user = current_user 
else # if there is the user id in params just use it, 
    # maybe get 'authorization failed' 
    @user = User.find params[:id] 
end 
Powiązane problemy