Pretty URL, dùng gem Friendy_id cơ bản
Pretty url là gì? Theo đúng nghĩa đen là để cho URL của bạn trông đẹp hơn. Ví dụ Ban đầu: http://localhost:3000/users/2 Sau đó: http://localhost:3000/users/tranha Cách dùng (ở đây mình dùng cho user) gem "friendly_id" , "~> 5.1.0" bundle install rails generate ...
Pretty url là gì? Theo đúng nghĩa đen là để cho URL của bạn trông đẹp hơn.
Ví dụ
Ban đầu: http://localhost:3000/users/2
Sau đó: http://localhost:3000/users/tranha
Cách dùng (ở đây mình dùng cho user)
gem "friendly_id","~> 5.1.0"
bundle install rails generate friendly_id rails generate scaffold user username:string slug:string:uniq rake db:migrate
Nếu bạn đã tạo bảng user trước đó rồi, thì chỉ cần thêm 2 dòng sau vào bảng user:
class CreateUsers < ActiveRecord::Migration def change create_table :users do |t| t.string :username t.string :email t.string :phone_number t.string :address t.string :password_digest t.boolean :is_admin, default: false t.string :slug #thêm dòng này t.timestamps null: false end add_index :users, :slug, unique: true #thêm dòng này end end
Trong model
class User < ActiveRecord::Base extend FriendlyId friendly_id :username, use: :slugged end
Trong controller
Bây giờ, thay vì dùng User.find() mà dùng ta dùng User.friendly.find()
Lưu ý
Nếu username bạn không để unique: true thì trong trường hợp này, bạn nên dùng slug_candidates
class Restaurant < ActiveRecord::Base extend FriendlyId friendly_id :slug_candidates, use: :slugged def slug_candidates [ :username, # users/username [:username, :email], # users/username-email [:username, :email, :address], # users/username-email-address ] end end
Nếu bạn dùng gem cancancan
load_and_authorize_resource sẽ mặc định là find id, vậy nên, muốn dùng friendly_id ở đây
Trong controller tương ứng:
class UsersController < ApplicationController load_and_authorize_resource find_by: :slug [...] end