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