0.0
No commit activity in last 3 years
No release in over 3 years
Addon to Mongoid that allows you to easily generate and query against human readable (parameterized) id's!
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Runtime

~> 2.0.0.beta4
 Project Readme

Mongoid::Param¶ ↑

Addon to Mongoid that allows you to easily generate and query against human readable (parameterized) id’s!

Installation¶ ↑

Add to Gemfile:

gem 'mongoid_param'

Getting Started¶ ↑

To parameterize a model, you only need to include the module in your model and then call param with the field(s) you want to parameterize on. Here’s an example:

class User
  include Mongoid::Document
  include Mongoid::Param

  field :username
  field :dob, :type => Date

  param :username
end

Parameterizing on Multiple Fields¶ ↑

You can pass multiple symbols to the param method to parameterize on multiple fields:

class Post
  include Mongoid::Document
  include Mongoid::Param

  field :year
  field :month
  field :day
  field :title

  param :year, :month, :day, :title
end

Customizing your Param values¶ ↑

You can easily customize your param value by passing a method to param:

class Message
  include Mongoid::Document
  include Mongoid::Timestamps
  include Mongoid::Param

  field :title
  param :generate_param

  private

  def generate_param
    created_at ||= Time.now  # necessary because we're called before validation
    "#{created_at.year} #{created_at.month} #{created_at.day} #{title}"
  end
end

Behind the Scenes¶ ↑

>> u = User.new :username => 'Bob', :dob => Date.today

>> u.to_param
=> "bob"

>> u.update_attributes :username => 'Johnny Walker'

>> u.to_param
=> "johnny_walker"

>> p = Post.new :title => 'Big Announcement', :year => 2010, :month => 2, :day => 13

>> p.to_param
=> "2010_2_13_big_announcement"

>> p.update_attributes :month => 10

>> p.to_param
=> "2010_10_13_big_announcement"

Usage in Rails¶ ↑

Mongoid::Param was designed to easily work with Rails.

In your controller:

class UserController < ApplicationController
  ...
  def show
    @user = User.find_by_param(params[:id])
  end
  ...
end

You can also chain criteria with param_is:

...
@user = User.param_is(params[:id]).active
...

In your view:

link_to @user.username, @user   # => /users/bob

Finding by Parameters¶ ↑

Included is a simple helper method that allows you to easily fetch a record by its _param field:

@user = User.find_by_param('bob')