/slugger

Primary LanguageRubyMIT LicenseMIT

Slugger

Slugger is yet another slug generator. It makes pretty urls for Active Record models. Why would the ruby (on rails) community need another slug generating plugin you ask? It doesn’t, but I needed one that would jump through some hoops to make sure slugs are unique without setting errors.

Installation

It’s a gem. Either run ‘gem install slugger` at the command line, or add `gem ’slugger’‘ to your Gemfile.

Usage

has_slug :source_column, [options_hash]

The default source column is title and slug column is, well slug. The following two settings are the same:

has_slug
has_slug :title, :slug_column => 'slug'

:source_column can also be an array, for example, if you wanted to create slugs for an Author model on first and last name:

class Author << ActiveRecord::Base
  has_slug [:first_name, :last_name]
end

To be sure that the slug will never have a validation error:

class Post << ActiveRecord::Base
  has_slug :title, :on_conflict => :concat_random_chars
end

Say you have an Episode model that belongs to TVSeries. Every episode will have a pilot, but you don’t want the unique validation to build silly looking urls: (this doesn’t actually work), patches welcome

class Episode << ActiveRecord::Base
  belongs_to :series

  has_slug :title, :scope => :series_id
end

Example

create_table "collections" do |t|
  t.string   "title"
  t.string   "slug"
end
add_index(:collections, :slug)

class Collection < ActiveRecord::Base
  has_slug
end

Collection.create(:title => 'Quick foxes jumping')
Collection.first.slug => 'quick-foxes-jumping'