acts_as_taggable_on_steroidsの使い方

インストールする(githubに引っ越してるから注意)

ruby script/plugin install git://github.com/jviney/acts_as_taggable_on_steroids.git
ruby script/generate acts_as_taggable_migration
rake db:migrate

Manualモデルというのをtaggableにするとして

Manualモデルには

  acts_as_taggable

と書く。

routes.rbには

  map.resources :manuals do |manual|
    manual.resources :tags, :collection => { :remove => :delete }
  end

と書く。
(/manuals/:manual_id/tags のURLで受け入れアクションが生成される。)

コントローラーはこんな感じ。

class TagsController < ApplicationController
layout nil

  before_filter :load_manual

  def index
    @tags = @manual.tag_list
  end

  def create
    keys = params[:name].gsub(/ /," ").scan(/\S+/)
    @tags = @manual.tag_list.add(keys)
    @manual.save
    render :action => 'index'
  end

  def remove
    @tags = @manual.tag_list.remove(params[:name])
    @manual.save
    render :action => 'index'
  end

private

  def load_manual
    @manual = Manual.find(params[:manual_id])
  end

end

views/tags/index.html.erbはこんな感じ。

<div id="tag">
  <% form_remote_tag :update => "tag", :url => manual_tags_url(@manual) do %>
    <h3>キーワード</h3>
    <div><%= text_field_tag 'name' %><%= submit_tag 'キーワードをつける' %></div>
  <% end %>
  <ul>
    <% @tags.each do |tag|%>
      <li><%=h tag %>
      <%= link_to_remote( '[削除]',:update => "tag",
        :url => remove_manual_tags_url(@manual,:name => tag), :method => :delete ) %>
      </li>
    <% end %>
  </ul>
</div>

以上です。