2010-05-04 16 views
5

Chciałbym utworzyć trasę szyn do edycji profilu użytkownika.Trasa Railsów zależna od bieżącego użytkownika

Zamiast używać/Users /: id/edytować, chciałbym mieć URL jak/edit_profile

Czy to możliwe, aby utworzyć dynamiczną trasę który włącza/edit_profile do/users/{użytkownika id}/edit, czy powinienem coś zrobić w kontrolerze lub?

+0

Wydaje mi się, że to nazwane zadanie route/controller. –

+0

Czy możliwe jest rozwinięcie trochę tego, co przez to rozumiesz? dzięki! – Lowgain

Odpowiedz

4

możesz chcieć utworzyć oddzielny kontroler dla tego zadania, ale może inni więc nadal korzystać users_controller i po prostu sprawdzić, czy istnieje params[:id] zestaw:

def edit 
    if params[:id] 
    @user = User.find(params[:id]) 
    else 
    @user = current_user 
    end 
end 

Ale należy pamiętać, że /users normalnie trasy działaniu index i nie show jeśli jeszcze trasę map.resources :users. Ale można założyć inaczej zwaną trasą liczby pojedynczej na to:

map.resources :users 
map.resource :profile, :controller => "users" 

ten sposób /users byłby listę wszystkich użytkowników, /users/:id pokaże każdemu użytkownikowi i /profile pokaże show aktualnie zalogowanego w stronę użytkownika. Aby edytować swój profil, zadzwoniłbyś "/ profile/edit".

+0

dzięki! Użyłem innej struktury adresów URL, ale udało mi się wykorzystać Twoją odpowiedź, by osiągnąć to, co chciałem! – Lowgain

3

Ponieważ trasa i kontroler służą dwóm różnym celom, będziesz potrzebować obu.

Dla kontrolera, przy założeniu, że przechowywanie identyfikatora użytkownika w sesji, można po prostu mieć swoją metodę edycji zrobić coś takiego:

def edit 
    @user = User.find(session[:user_id]) 
end 

Następnie mają trasy, który wygląda mniej więcej tak:

map.edit_profile "edit_profile", :controller => "users", :action => "edit" 

trasa ta nie daje nazwanego trasą zwaną edit_profile_path

0

odpowiedź Tomas Markauskas mogłoby działać, ale tutaj jest odpowiedź na pytanie z prowadnicami:

get 'edit_profile', to: 'users#edit' 

Tak więc, gdy ktoś idzie do www.yoursite.com/edit_profile, to będzie droga do www.yoursite .com/users/edit.

Następnie w kontrolerze można uzyskać dostęp użytkownikowi

@user = User.find(session[:current_user_id]) 

Zakładając ustawienie tej zmiennej sesji, gdy ktoś zaloguje. Ponadto, nie zapomnij, aby sprawdzić, czy jesteś zalogowany. Będzie to działa, jeśli korzystasz z Resourceful Routing (domyślnie Rails) lub nie.

Źródło: http://guides.rubyonrails.org/routing.html

0

zrobić trasę jako

get '/users/:id/edit', to: 'users#edit', as: 'edit_profile' 

jak wyjaśniono w tej sekcji linków 'hard way':

http://augustl.com/blog/2009/styling_rails_urls/

Adres URL będzie

/users/edit_profile 

Ponieważ identyfikator nie znajduje się już w adresie URL, musimy nieco zmienić kod.

class User < ActiveRecord::Base 
    before_create :create_slug 

    def to_param 
    slug 
    end 

    def create_slug 
    self.slug = self.title.parameterize 
    end 
end 

Po utworzeniu użytkownika wersja tytułowa w wersji przyjaznej dla adresu URL jest przechowywana w bazie danych w kolumnie z karetką.

Dla lepszego zrozumienia przeczytać poniższy odnośnik

http://blog.teamtreehouse.com/creating-vanity-urls-in-rails

0

zapisz go w dowolnym sterownikiem domowym.

def set_roots

if current_user  
    redirect_to dashboard_home_index_path 
else  
    redirect_to home_index_path 
end  

końcowy

w routes.rb pliku

root: => 'do domu # set_roots'

meczu "/ find_roots" => „home #set_roots "

Powiązane problemy