Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Find records for Rails controller actions declaratively.
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
.gitignore
.yardopts
LICENSE
README.markdown
declarative-find.gemspec

README.markdown

Declarative Find

This Rails plugin makes a find method available at the class level in ApplicationController which takes the name of an ActiveRecord model. Using this method creates a before filter which finds an ActiveRecord instance and assigns it to an appropriately named instance variable in the controller. The name of the model passed to find is used for both the key in params assumed to contain the ID of the record to find as well as the name of the instance variable to assign it to. This behavior can be customized any which way via options. An 404 HTTP code will be returned and the corresponding error page rendered for non-existent records via the http-error gem.

Full documentation is at RubyDoc.info.

Examples

Straight-forward

The following example assumes the request for the delete action has an :id or :user param passed to it with the ID of the user to delete.

class UserController < ApplicationController
  find(:user)

  def delete
    @user.destroy
  end
end

Different parameter name

The following example assumes the request for the delete action has a :user_id param passed to it with the ID of the user to delete.

class UserController < ApplicationController
  find(:user, :param => :user_id)

  def delete
    @user.destroy
  end
end

Different instance variable name

class UserController < ApplicationController
  find(:user, :variable => :user_to_delete)

  def delete
    @user_to_delete.destroy
  end
end

Custom lookup

class UserController < ApplicationController
  find(:user)

  def delete
    @user.destroy
  end

  protected

  def find_user
    User.find_by_email(params[:email])
  end
end

Pass-through of options

The find can be restricted to specific actions the same way a typical before filter can be—in fact, any options passed to find are simply passed through to before_filter.

class UserController < ApplicationController
  find(:user, :only => :delete)

  def delete
    @user.destroy
  end

  def something_else
    render(:text => 'Something else.')
  end
end

Colophon

See also

If you like this gem, you may also want to check out Create New, Save Changes To, or HTTP Error.

Tested with

  • Rails 3.0.5 — 20 May 2011

Contributing

To send patches, please fork on GitHub and submit a pull request.

Credits

© 2011 Cody Robbins. See LICENSE for details.

Something went wrong with that request. Please try again.