Untuk dokumentasi terlengkap dan mudah digunakan, lihat Panduan FriendlyId.
FriendlyId adalah "buldoser Swiss Army" dari plugin slugging dan permalink untuk Active Record. Ini memungkinkan Anda membuat URL cantik dan bekerja dengan string yang ramah manusia seolah-olah itu adalah id numerik.
Dengan FriendlyId, mudah untuk membuat aplikasi Anda menggunakan URL seperti:
https://example.com/states/washington
alih-alih:
https://example.com/states/4323454
Ajukan pertanyaan tentang Stack Overflow menggunakan tag "friendly-id", dan untuk bug lihat bagian bug
FriendlyId menawarkan banyak fitur lanjutan, termasuk:
Tambahkan baris ini ke Gemfile aplikasi Anda:
gem 'friendly_id' , '~> 5.5.0'
Catatan: Anda HARUS menggunakan 5.0.0 atau lebih tinggi untuk Rails 4.0+.
Dan kemudian jalankan:
bundle install
Tambahkan kolom slug
ke tabel yang diinginkan (misalnya Users
)
rails g migration AddSlugToUsers slug:uniq
Hasilkan file konfigurasi ramah dan migrasi baru
rails generate friendly_id
Catatan: Anda dapat menghapus migrasi CreateFriendlyIdSlugs
jika Anda tidak ingin menggunakan fitur riwayat slug. (Baca selengkapnya)
Jalankan skrip migrasi
rails db:migrate
Edit file app/models/user.rb
sebagai berikut:
class User < ApplicationRecord
extend FriendlyId
friendly_id :name , use : :slugged
end
Edit file app/controllers/users_controller.rb
dan ganti User.find
dengan User.friendly.find
class UserController < ApplicationController
def show
@user = User . friendly . find ( params [ :id ] )
end
end
Sekarang ketika Anda membuat pengguna baru seperti berikut:
User . create! name : "Joe Schmoe"
Anda kemudian dapat mengakses halaman acara pengguna menggunakan URL http://localhost:3000/users/joe-schmoe.
Jika Anda menambahkan FriendlyId ke aplikasi yang sudah ada dan perlu membuat slug untuk pengguna yang sudah ada, lakukan ini dari konsol, runner, atau tambahkan tugas Rake:
User . find_each ( & :save )
:allow_nil
Anda dapat meneruskanallow_nil allow_nil: true
ke metode friendly.find()
jika Anda ingin menghindari peningkatan ActiveRecord::RecordNotFound
dan menerima 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
Silakan laporkan di pelacak masalah Github untuk proyek ini.
Jika Anda memiliki bug untuk dilaporkan, harap sertakan informasi berikut:
Jika Anda bisa, akan lebih membantu jika Anda dapat melakukan fork FriendlyId di Github, dan menambahkan tes yang mereproduksi kesalahan yang Anda alami.
Untuk inspirasi lebih lanjut tentang cara melaporkan bug, silakan lihat artikel ini.
FriendlyId awalnya dibuat oleh Norman Clarke dan Adrian Mugnolo, dengan bantuan signifikan di awal kehidupannya oleh Emilio Tagua. Sekarang dikelola oleh Norman Clarke dan Philip Arndt.
Kami sangat berterima kasih atas kontribusi dermawan selama bertahun-tahun dari banyak relawan.
Hak Cipta (c) 2008-2020 Norman Clarke dan kontributor, dirilis di bawah lisensi MIT.
Izin dengan ini diberikan, secara gratis, kepada siapa pun yang memperoleh salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menggunakan Perangkat Lunak tanpa batasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , mempublikasikan, mendistribusikan, mensublisensikan, dan/atau menjual salinan Perangkat Lunak, dan mengizinkan orang yang menerima Perangkat Lunak untuk melakukan hal tersebut, dengan tunduk pada ketentuan berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini akan disertakan dalam semua salinan atau sebagian besar Perangkat Lunak.
PERANGKAT LUNAK INI DISEDIAKAN "APA ADANYA", TANPA JAMINAN APA PUN, TERSURAT MAUPUN TERSIRAT, TERMASUK NAMUN TIDAK TERBATAS PADA JAMINAN KELAYAKAN UNTUK DIPERDAGANGKAN, KESESUAIAN UNTUK TUJUAN TERTENTU, DAN TIDAK ADA PELANGGARAN. DALAM KEADAAN APA PUN PENULIS ATAU PEMEGANG HAK CIPTA TIDAK BERTANGGUNG JAWAB ATAS KLAIM, KERUSAKAN, ATAU TANGGUNG JAWAB LAINNYA, BAIK DALAM TINDAKAN KONTRAK, HUKUM ATAU LAINNYA, YANG TIMBUL DARI, ATAU SEHUBUNGAN DENGAN PERANGKAT LUNAK ATAU PENGGUNAAN ATAU HAL-HAL LAIN DALAM PERANGKAT LUNAK.