bumi / find_by_param
- Source
- Commits
- Network (3)
- Issues (0)
- Downloads (0)
- Wiki (1)
- Graphs
-
Branch:
master
| name | age | message | |
|---|---|---|---|
| |
.gitignore | Wed Nov 25 11:06:29 -0800 2009 | |
| |
History.txt | Mon Jan 04 05:32:00 -0800 2010 | |
| |
MIT-LICENSE | ||
| |
README.md | Sun Jan 03 13:03:20 -0800 2010 | |
| |
Rakefile | Sun Jan 03 12:55:45 -0800 2010 | |
| |
init.rb | Wed Nov 25 11:06:29 -0800 2009 | |
| |
install.rb | Tue Mar 25 07:15:37 -0700 2008 | |
| |
lib/ | Mon Jan 04 05:18:21 -0800 2010 | |
| |
shoulda_macros/ | ||
| |
tasks/ | Tue Mar 25 07:15:37 -0700 2008 | |
| |
test/ | Mon Jan 04 05:17:05 -0800 2010 | |
| |
uninstall.rb | Tue Mar 25 07:15:37 -0700 2008 | |
| |
version.yml | Wed Nov 25 11:06:29 -0800 2009 |
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
As gem from gemcutter:
% gem install find_by_param
Building your own
% rake gemspec
% rake install
As Rails plugin
% script/plugin install git://github.com/bumi/find_by_param.git
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
:fieldThe 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.: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 (http://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 (c) 2007 [Michael Bumann - Railslove.com], released under the MIT license


