Mongoid Taggable

Mongoid Taggable provides some helpers to create taggable documents.

Installation

You can simple install from rubygems:

gem install mongoid_taggable

or in Gemfile:

gem 'mongoid_taggable'

or as a Rails Plugin:

script/plugin install git://github.com/wilkerlucio/mongoid_taggable.git

Basic Usage

To make a document taggable you just need to include Mongoid::Taggable into your document:

class Post
  include Mongoid::Document
  include Mongoid::Taggable</code>
  
<code>  field :title
  field :content
end

Them in your form:

<% form_for @post do |f| %>
  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
  <p>
    <%= f.label :content %><br />
    <%= f.text_area :content %>
  </p>
  <p>
    <%= f.label :tags %><br />
    <%= f.text_field :tags %>
  </p>
  <p>
    <button type="submit">Send</button>
  </p>
<% end %>

In this case, the text fields for tags should receive the list of tags separated by comma (below in this document you will see how to change the separator)

Then your document will have the tags and tags_array getter and setter. The tags you use as a plain string with tags separated by comma, and the tags_array is an array with tags. These two properties are automatically synchronized.

Tags Indexing

This lib will automatically create an index of tags and their counts for you after saving the document, useful for getting a list of all tags used in documents of this collection or to create a tag cloud. See the following example to understand how to use it:

Post.create!(:tags => "food,ant,bee")
Post.create!(:tags => "juice,food,bee,zip")
Post.create!(:tags => "honey,strip,food")</code>

<code>Post.tags # will retrieve ["ant", "bee", "food", "honey", "juice", "strip", "zip"]
Post.tags_with_weight # will retrieve:
# [
#   ['ant', 1],
#   ['bee', 2],
#   ['food', 3],
#   ['honey', 1],
#   ['juice', 1],
#   ['strip', 1],
#   ['zip', 1]

If you don’t want to use this feature, it is good to disable it to improve performance:

class Post
  include Mongoid::Document
  include Mongoid::Taggable</code>

<code>  disable_tags_index! # will disable index creation</code>

<code>  field :title
  field :content
end

Changing default separator

To change the default separator you may call the tags_separator class method:

class Post
  include Mongoid::Document
  include Mongoid::Taggable</code>

<code>  tags_separator ';' # will change tags separator to ;</code>

<code>  field :title
  field :content
end