Parameterize

The simplest permalink/slug solution for ActiveRecord >= 3.0.

It uses ActiveSupport's String#parameterize to create the slug. There are no validations. No slug history. No extra tables or models.

Getting Started

# Gemfile
gem 'parameterize'
$ bundle install
$ rails generate model User name:string param:string
# Parameterize requires a string column named 'param'
# models/user.rb
class User < ActiveRecord::Base
  parameterize :name
end

# elsewhere
user = User.new :name => 'John Doe'
user.valid?
user.param = 'john-doe'
user.to_param = 'john-doe'

Notes

Validations are not included. I prefer to be able to customize my validations directly in the model. The most common validations you would add are:

class Post < ActiveRecord::Base
  parameterize
  validates_presence_of :param
  validates_uniqueness_of :param
end

You could easily use Babosa's #to_identifier or Stringex's #to_url instead of ActiveSupport's #parameterize by just aliasing the method you want to use:

require 'babosa'
class String
  alias :parameterize :to_identifier
end

There is also a Shoulda-style RSpec matcher available for use in your specs:

# spec_helper.rb
require 'parameterize/matcher'

# post_spec.rb
describe Post do
  it { should parameterize(:title) }
end

Copyright (c) 2011 Peter Browne. See LICENSE for details.