2012-03-08 16 views
6

W mojej aplikacji rails mam obecnie mnóstwo użytkowników, z których każdy ma zarejestrowany identyfikator użytkownika.Ukryj identyfikator użytkownika w pasku adresu

Jeśli przejdę do indeksu moich użytkowników i kliknę stronę pokazu użytkowników, otrzymam następujący przykładowy nagłówek.

localhost: 3000/Users/3

Teraz mi się nie podoba to, jak to łatwo pozwala ludziom przejść przez użytkowników w nagłówku.

Jak powinienem wykonać następujące czynności, aby wyświetlało ono pole user.username zamiast np.

localhost: 3000/users/adamwest

Odpowiedz

8

Można zdefiniować to_param metodę na modelu użytkownika.

class User 
    ... 
    def to_param 
    name 
    end 
    ... 
end 

wtedy każdy generowane adresy URL będą musiały name zamiast id jako identyfikator użytkownika.

sid = User.new :name => 'sid' 
user_path(sid) #=> "https://stackoverflow.com/users/sid" 

Oczywiście w kontrolerze należy znaleźć użytkownika po nazwisku.

class UsersController 
    ... 
    def show 
    @user = User.find_by_name(params[:id]) 
    end 
    ... 
end 

Proponuję także, aby przyjrzeć friendly_id gem.

FriendlyId jest „Swiss Army spychacz” z udary i zobacz całą wtyczek dla ActiveRecord. Umożliwia tworzenie ładnych adresów URL i pracy z przyjaznymi dla ludzi ciągami, tak jakby były numerycznymi identyfikatorami dla modeli ActiveRecord .

+0

Dzięki temu działa świetnie. Na razie ustawiłem ją na podstawową, ale sprawdzę ten gem friend_id, aby stworzyć bardziej przyjazną stronę. Dzięki. – user1222136

+1

A jeśli 'User # name' może zawierać kropkę, wówczas na ścieżce będziesz chciał': constraints => {: name => /.*/} ', aby Rails nie próbował interpretować rzeczy po okresie jako format. –

Powiązane problemy