Slugs
Manages slugs for records with minimal efford in rails.
Why
I did this gem to:
- Generalize how to control when routes will use the slug param.
- Keep old slugs active until the record is destroyed.
- Ensure unique slugs by appending an index automatically on duplicates.
Install
Put this line in your Gemfile:
gem 'slugs'
Then bundle:
$ bundle
Configuration
Run the install generator:
$ bundle exec rails g slugs:install
Set the global settings:
Slugs.configure do |config|
config.use_slug? do |record, params|
params[:controller] != 'admin'
end
end
Usage
Definitions
Add the column to your tables:
class AddSlug < ActiveRecord::Migration
def change
add_column :products, :slug, :string
end
end
Update your db:
$ bundle exec rake db:migrate
Define slugs in your models:
class Product < ActiveRecord::Base
has_slug :model, :name, scope: :shop_id
end
Generation
A slug will be generated every time you create/update a record:
product = Product.create(name: 'Stratocaster', model: 'American Standar', ...)
product.slug # => 'american-standard-stratocaster'
An index will be appended if another record with the same slug is created:
product = Product.create(name: 'Stratocaster', model: 'American Standard', ...)
product.slug # => 'american-standard-stratocaster-1'
Every time you change a record, the slug will be updated:
product.update name: 'Strat'
product.slug # => 'american-standard-strat'
Finders
The find method of models will start accepting slugs and remember old ones:
Product.find 'american-standard-stratocaster' # => product
Product.find 'american-standard-strat' # => product
Routes
The logic of the use_slug? block is used to determine when to sluggize:
admin_product_path product # => 'admin/products/34443'
product_path product # => 'products/american-standard-strat'
Credits
This gem is maintained and funded by mmontossi.
License
It is free software, and may be redistributed under the terms specified in the MIT-LICENSE file.