Switch branches/tags
Nothing to show
Find file
Fetching contributors…
Cannot retrieve contributors at this time
118 lines (67 sloc) 3.05 KB

This gem is a cutomized version of


find_by_param helps you dealing with permalinks and finding objects by our permalink value

class Post < ActiveRecord:Base
  make_permalink :with => :title

now you can do


If you have a permalink-column find_by_param saves the permalink there and uses that otherwise it just uses the provided attribute.


Via RubyGems

% gem install find_by_param

Building your own

% gem build find_by_param.gemspec
% gem install find_by_param-VERSION.gem

As Rails plugin

% script/plugin install git://



make_permalink :with => :login
make_permalink :with => :title, :prepend_id => true
make_permalink :with => :name, :forbidden => %w(new edit)

Client code

Post.create(:title => "hey ho let's go!").to_param #=> "hey-ho-lets-go"
          # ... to_param is the method Rails calls to create the URL values

Post.find_by_param("hey-ho-lets-go") #=> <Post>

Post.find_by_param("is-not-there")   #=> nil
Post.find_by_param!("is-not-there")  #=> raises ActiveRecord::RecordNotFound

Basic Documentation

Options for make_permalink

The following options may be used, when configuring the permalink generation with make_permalink.

  • :with (required)

    The attribute that should be used as permalink

  • :field

    The name of your permalink column. make_permalink first checks if there is a column.

  • :prepend_id => [true|false]

    Do you want to prepend the ID to the permalink? for URLs like: posts/123-my-post-title - find_by_param uses the ID column to search.

  • :param_size => [Number]

    Desired maximum size of the permalink, default is 50.

  • :escape => [true|false]

    Do you want to escape the permalink value? (strip chars like öä?&) - actually you must do that

  • :forbidden => [Regexp|String|Array of Strings]

    Define which values should be forbidden. This is useful when combining user defined values to generate permalinks in combination with restful routing. Make sure, especially in the case of a Regexp argument, that values may become valid by adding or incrementing a trailing integer.

Class methods provided by find_by_param

The following methods are added as public methods to all classes containing a permalink field.

  • find_by_param(id)

    Look up a value by its permalink value, returns matching instance or nil, if none is found.

  • find_by_param!(id)

    Look up a value by its permalink value, returns matching instance or raises ActiveRecord::RecordNotFound, if none is found.


  • Alex Sharp ( pointed to an issue with STI. Better call make_permalink in every child class and not only in the parent class..

  • write nice docs

  • write nicer tests

Copyright © 2007 [Michael Bumann -], released under the MIT license