Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Find_by_param is a nice and easy way to handle permalinks and dealing with searching for to_param values
Ruby
branch: master
Failed to load latest commit information.
lib Guarding the use of class_attribute to keep compatibility with 3.0
shoulda_macros fix path to shoulda matchers
tasks inital commit
test
.gitignore Added support to rails 3.1
Gemfile Adding source to make it work on my machine
History.txt Updating History to reflect latest changes
MIT-LICENSE remove multiple dashes in escaped URL
README.rdoc Remove white space
Rakefile require psych removed
find_by_param.gemspec Updating gemspec to allow rails 2.3, 3, and 3.1
init.rb using jeweler to generate a gem
install.rb inital commit
uninstall.rb inital commit

README.rdoc

find_by_param

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

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

now you can do

Post.find_by_param(...)

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

Installation

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://github.com/bumi/find_by_param.git

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

Examples

Configuration

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.

Issues

  • Alex Sharp (github.com/ajsharp) 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 - Railslove.com], released under the MIT license

Something went wrong with that request. Please try again.