Mongoid Taggable provides some helpers to create taggable documents.
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
To make a document taggable you just need to include Mongoid::Taggable into your document:
class Post include Mongoid::Document include Mongoid::Taggable
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 colon (above in this document you will see how to change the separator)
Them your document will have the tags
and tags_array
getter and setter. The tags
you use as a plain string with tags separated by colon, the tags_array
is an array with tags, these two properties are automatic synchronized.
This lib will automatic create for you and index of tags after save the document, this index is useful to get 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")
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, its good to disable for improve performance:
class Post include Mongoid::Document include Mongoid::Taggable
disable_tags_index! # will disable index creation
field :title field :content end
To change default separator you just need to call tags_separator
method on class:
class Post include Mongoid::Document include Mongoid::Taggable
tags_separator ';' # will change tags separator to ;
field :title field :content end