Pretty URL, dùng gem Friendy_id cơ bản
Bài đăng này đã không được cập nhật trong 8 năm
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
All rights reserved