public
Rubygem
Fork of mbleigh/from_param
Description: Rails plugin that adds a from_param class method to ActiveRecord::Base for simple URL-based fetching.
Homepage: http://mbleigh.lighthouseapp.com/projects/10478-from-param
Clone URL: git://github.com/ffmike/from_param.git
name age message
file .gitignore Sat Apr 26 20:10:57 -0700 2008 Complete rewrite to include automatic storing a... [mbleigh]
file MIT-LICENSE Loading commit data...
file README Sat Oct 11 18:26:38 -0700 2008 Added 2.2 compatibility (String.urlize maps to ... [ffmike]
file Rakefile Fri Sep 12 06:58:07 -0700 2008 Fix rake file & spec_helper to enable standalon... [ffmike]
file from_param.gemspec
file init.rb Fri Aug 29 01:41:58 -0700 2008 Added gemspec & rakefile [ffmike]
directory lib/
directory rails/
directory spec/ Tue Oct 21 05:36:33 -0700 2008 Fix bug in serialization code used in case of p... [ffmike]
FromParam
=========

This plugin is an addition to  ActiveRecord::Base that establishes a better 
convention for finding records based on parameters. It adds a "from_param" class
method to ActiveRecord::Base as a convention for fetching a model from a URL
parameter. By default it will find a record based on the to_i of the passed in
parameter, but storing a parameter in a column is where it becomes especially useful.

If you create a 'param' column in your table (or any other column using set_param_column),
the to_param of your record will automatically be saved to that column whenever
you save the record, and you will be able to retrieve it using just a simple
Model.from_param call with the generated to_param. It is probably wise to add an index
to the param column if you use one.

It's time to move away from generated-key-dependence, and this plugin is an attempt
to make that easy, painless, and work easily within the existing systems.

Example
=======

  # default behavior

  class User < ActiveRecord::Base
    def to_param
      "#{id}-#{first_name.downcase}-#{last_name.downcase}"
    end
  end
  
  class UsersController < ApplicationController
    # GET /users/1-bobby-mcfarin
    def show
      @user = User.from_param(params[:id]) # => <User id=1 first_name="Bobby" last_name="McFarin">
    end
  end
  
  # using a 'param' column, in this case 'slug'. Note the use of String.urlize to make the title URL-friendly.
  # On Rails 2.2+, String.urlize is an alias for Rails built-in Inflector.parameterize.
  
  class Post < ActiveRecord::Base
    set_param_column "slug" # defaults to "param"
    def to_param
      "#{created_at.strftime("%Y-%m-%d")}-#{title.urlize}"
    end
  end

  class PostsController < ApplicationController
    # GET /posts/2008-04-26-from-param-plugin-released
    @post = Post.from_param(params[:id]) # => <Post title="From Param: Plugin Released" created_at="2008-04-26">
  end

Note: You will need to have the rspec gem installed to run the tests.
  
Resources
=========

GitHub: http://github.com/mbleigh/from_param
Lighthouse: http://mbleigh.lighthouseapp.com/projects/10478-from-param

Copyright (c) 2007 Michael Bleigh (http://mbleigh.com/) and Intridea Inc. (http://intridea.com/), released under the MIT 
license