Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

SEO Permalink Plugin for Ruby on Rails

branch: master
README.md

has_permalink

Checkout haspermalink.org for more details.

A gem for generating url-safe permalink-string from any other attribute in the same ActiveRecord model.

Make you urls look like '/users/olkarls' instead of '/users/1'.

Installation

put this in your gemfile:

gem "has_permalink"

And run in your terminal:

bundle install

If your model doesn’t already have the permalink attribute you can run this generator command:

rails g has_permalink [Model]

That will generate a migration which adds a permalink attribute [Model] and indexes it. Don’t forget to:

rake db:migrate

Example

class Post < ActiveRecord::Base
  has_permalink
end

The plugin assumes that the permalink attribute is generated from the title attribute but it can be changed by providing an argument like this:

class Post < ActiveRecord::Base
  has_permalink :heading
end

The permalink attribute is generated by the before_validation callback and is only transformed if it’s blank. If it's not blank and you want to regenerate it use:

@post.generate_permalink!

Use this syntax your controller:

def show
  @post = Post.find_by_permalink(params[:id])
end

Updates

2011-06-25, version 0.1.1

  • Only override find if there is only one argument which is a string.

2011-06-20, version 0.1.0

  • Auto resolve duplication, if wanted
  • Merged Anoopr's fork, thanks!

2011-05-23

  • Override find to query the permalink attribute.

2011-03-12, version 0.0.8

  • Removed the Rails 3 dependency.
  • Updated homepage.

2011-02-01, version 0.0.7:

  • Permalinks can't start or end with '-'.
  • Added class method for use in rake task.

2011-01-31, version 0.0.6:

  • Fixed a bug where the permalink could sometimes remove characters.

Copyright (c) 2009 - 2011 Ola Karlsson, released under the MIT license

Bitdeli Badge

Something went wrong with that request. Please try again.