Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Find_by_param is a nice and easy way to handle permalinks and dealing with searching for to_param values
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
Gemfile Adding source to make it work on my machine
README.rdoc Remove white space
find_by_param.gemspec Updating gemspec to allow rails 2.3, 3, and 3.1
init.rb using jeweler to generate a gem
uninstall.rb inital commit



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://

find_by_param is known to work with Rails 2.3, 3.0 and 3.1.



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

Something went wrong with that request. Please try again.