สำหรับเอกสารประกอบที่เป็นมิตรต่อผู้ใช้ที่สมบูรณ์ที่สุด โปรดดู FriendlyId Guide
FriendlyId คือ "รถปราบดินของกองทัพสวิส" ของปลั๊กอินกระสุนและลิงก์ถาวรสำหรับ Active Record มันช่วยให้คุณสร้าง URL ที่สวยงามและทำงานกับสตริงที่เป็นมิตรต่อมนุษย์ราวกับว่ามันเป็นรหัสตัวเลข
ด้วย FriendlyId ทำให้แอปพลิเคชันของคุณใช้ URL เช่น:
https://example.com/states/washington
แทน:
https://example.com/states/4323454
ถามคำถามเกี่ยวกับ Stack Overflow โดยใช้แท็ก "Friendly-id" และสำหรับข้อบกพร่อง โปรดดูที่ส่วนข้อบกพร่อง
FriendlyId นำเสนอคุณสมบัติขั้นสูงมากมาย รวมไปถึง:
เพิ่มบรรทัดนี้ลงใน Gemfile ของแอปพลิเคชันของคุณ:
gem 'friendly_id' , '~> 5.5.0'
หมายเหตุ: คุณต้องใช้ 5.0.0 หรือสูงกว่าสำหรับ Rails 4.0+
แล้วดำเนินการ:
bundle install
เพิ่มคอลัมน์ slug
ลงในตารางที่ต้องการ (เช่น Users
)
rails g migration AddSlugToUsers slug:uniq
สร้างไฟล์การกำหนดค่าที่เป็นมิตรและการย้ายข้อมูลใหม่
rails generate friendly_id
หมายเหตุ: คุณสามารถลบการย้าย CreateFriendlyIdSlugs
ได้ หากคุณจะไม่ใช้คุณลักษณะประวัติกระสุน (อ่านเพิ่มเติม)
เรียกใช้สคริปต์การย้ายข้อมูล
rails db:migrate
แก้ไขไฟล์ app/models/user.rb
ดังต่อไปนี้:
class User < ApplicationRecord
extend FriendlyId
friendly_id :name , use : :slugged
end
แก้ไขไฟล์ app/controllers/users_controller.rb
และแทนที่ User.find
ด้วย User.friendly.find
class UserController < ApplicationController
def show
@user = User . friendly . find ( params [ :id ] )
end
end
ตอนนี้เมื่อคุณสร้างผู้ใช้ใหม่ดังต่อไปนี้:
User . create! name : "Joe Schmoe"
จากนั้นคุณสามารถเข้าถึงหน้าแสดงของผู้ใช้โดยใช้ URL http://localhost:3000/users/joe-schmoe
หากคุณกำลังเพิ่ม FriendlyId ให้กับแอปที่มีอยู่และจำเป็นต้องสร้างทากสำหรับผู้ใช้ปัจจุบัน ให้ทำสิ่งนี้จากคอนโซล รันเนอร์ หรือเพิ่มงาน Rake:
User . find_each ( & :save )
:allow_nil
คุณสามารถส่งค่า allow_nil: true
ไปยังเมธอด friendly.find()
ได้ หากคุณต้องการหลีกเลี่ยงการเพิ่ม ActiveRecord::RecordNotFound
และยอมรับ nil
MyModel . friendly . find ( "bad-slug" ) # where bad-slug is not a valid slug
MyModel . friendly . find ( 123 ) # where 123 is not a valid primary key ID
MyModel . friendly . find ( nil ) # maybe you have a variable/param that's potentially nil
#=> raise ActiveRecord::RecordNotFound
MyModel . friendly . find ( "bad-slug" , allow_nil : true )
MyModel . friendly . find ( 123 , allow_nil : true )
MyModel . friendly . find ( nil , allow_nil : true )
#=> nil
โปรดรายงานพวกเขาในเครื่องมือติดตามปัญหา Github สำหรับโปรเจ็กต์นี้
หากคุณมีข้อบกพร่องที่ต้องรายงาน โปรดระบุข้อมูลต่อไปนี้:
หากคุณสามารถทำได้ จะยิ่งช่วยได้มากขึ้นหากคุณสามารถแยก FriendlyId บน Github และเพิ่มการทดสอบที่ทำให้เกิดข้อผิดพลาดที่คุณกำลังประสบอยู่
หากต้องการแรงบันดาลใจเพิ่มเติมเกี่ยวกับวิธีรายงานจุดบกพร่อง โปรดดูบทความนี้
FriendlyId เดิมสร้างขึ้นโดย Norman Clarke และ Adrian Mugnolo ด้วยความช่วยเหลือที่สำคัญในช่วงต้นชีวิตโดย Emilio Tagua ปัจจุบันได้รับการดูแลโดย Norman Clarke และ Philip Arndt
เรารู้สึกขอบคุณอย่างสุดซึ้งสำหรับความช่วยเหลืออันมีน้ำใจจากอาสาสมัครจำนวนมากตลอดหลายปีที่ผ่านมา
ลิขสิทธิ์ (c) 2008-2020 Norman Clarke และผู้มีส่วนร่วม เผยแพร่ภายใต้ใบอนุญาต MIT
อนุญาตให้บุคคลใดก็ตามที่ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") อนุญาตโดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.