untuk membuat tag pada rails kita cukup memerlukan satu plugin saja yang bernama acts_as_taggable_on_steroids adapun tatacara penggunaan sebagai berikut :
yang pertama install pluginnya dengan perintah :
script/plugin install http://svn.viney.net.nz/things/rails/plugins/acts_as_taggable_on_steroids
seteh kita install buatlah migrations nya dengan perintah :
ruby script/generatr migrations add_tag_support
lalu pada migrationsnya kita tuliskan :
class AddTagSupport < ActiveRecord::Migration
def self.up
#Table for your Tags
create_table :tags do |t|
t.column :name, :string
end
create_table :taggings do |t|
t.column :tag_id, :integer
#id of tagged object
t.column :taggable_id, :integer
#type of object tagged
t.column :taggable_type, :string
end
# Index your tags/taggings
add_index :tags, :name
add_index :taggings, [:tag_id, :taggable_id, :taggable_type]
end
def self.down
drop_table :taggings
drop_table :tags
end
end
lalu kita migrate dengan perintah:
rake db:migrate
langkah selanjutnya pada model yang akan kita beri tag, misalnya model blog, maka pada model blog kita tambahkan
acts_as_taggable
lalu pada view/blogs file new dengan edit kita tambah :
untuk New :
<p>
<label for=”tag_name”>Add your tags <small>(separated by comma)</small></label><br/>
<%= text_field ‘tag’,'name’ %><br/>
</p>
Untuk Edit :
<p>
<label for=”tag_name”>Add your tags <small>(separated by comma)</small></label><br/>
<%= text_field ‘blog’,'tag_list’ %><br/>
</p>
lalu pada blogs_controller
def edit
blog_id = Blog.find(:all, :conditions => ["id = ? ", params[:id]]).collect {|a| a.id }
if edit_privileges?(blog_id)
@blog = Blog.find(params[:id])
else
redirect_to :action => ‘index’
end
end
# POST /blogs
# POST /blogs.xml
def create
@blog = Blog.new(params[:blog])
@blog.save
taggable_id = @blog.id
if session[:tag_name]
collect_tag(session[:tag_name])
else
collect_tag(params[:tag][:name])
end
@tags.each do |tag|
tag_found = Tag.find_by_name(tag)
tag_found = Tag.create(:name => tag) if !tag_found
save_tagging(tag_found.id, taggable_id)
end
redirect_to :action => ‘index’
end
private
def save_tagging(tag_id, taggable_id)
Tagging.create(:tag_id => tag_id,
:taggable_id => taggable_id,
:taggable_type => “Blog”)
end
def edit_privileges?(blog_id)
blog_id.each do |id|
return true if id == original_id(params[:id]).to_i
end
return false
end
def collect_tag(tag_input)
@collect_tag = tag_input.gsub(” “,”")
@tags = @collect_tag.split(‘,’)
end