2012-03-08 42 views
6

Trong ứng dụng đường ray của tôi, tôi hiện có một lượng người dùng có mỗi id người dùng đã đăng ký.Ẩn id người dùng trong thanh url

Nếu tôi truy cập chỉ mục người dùng của mình và nhấp vào trang hiển thị người dùng, tôi sẽ nhận được tiêu đề ví dụ sau.

localhost: 3000/users/3

Bây giờ tôi không thích điều này vì nó dễ dàng cho phép mọi người bỏ qua người sử dụng trong tiêu đề.

Làm cách nào để tôi thực hiện các thao tác sau để nó hiển thị trường user.username thay vì ví dụ:

localhost: 3000/users/adamwest

Trả lời

8

Bạn có thể xác định một phương pháp to_param trên mô hình người dùng.

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

Sau đó, mọi URL được tạo sẽ có name thay vì số nhận dạng người dùng.

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

Tất nhiên, trong bộ điều khiển, bạn phải tìm người dùng theo tên.

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

Tôi cũng khuyên bạn nên xem friendly_id đá quý.

FriendlyId là "Xe ủi đất quân đội Thụy Sĩ" của việc kéo và cố định plugin cho ActiveRecord. Nó cho phép bạn tạo các URL đẹp và hoạt động với các chuỗi thân thiện với con người như thể chúng là các id số cho các mô hình ActiveRecord.

+0

Cảm ơn điều đó, hoạt động tốt. Tôi đã thiết lập nó thành cơ bản cho bây giờ nhưng sẽ kiểm tra gem này friendly_id để tạo ra một trang web thân thiện hơn. Cảm ơn. – user1222136

+1

Và nếu 'User # name' có thể chứa một khoảng thời gian thì bạn sẽ muốn': constraints => {: name => /.*/} 'trên tuyến đường để giữ Rails không cố gắng diễn giải nội dung sau khoảng thời gian dưới dạng định dạng. –

Các vấn đề liên quan