2007年09月28日

acts_as_taggable

あるモデルに対してタグ付けを行うプラグイン

あるモデル => taggingモデル <=(has_many) tagモデル


環境 rails:1.2.3 ,ruby:1.8.6

インストール

>ruby script\plugin install acts_as_taggable


migrationファイルの生成

>rake acts_as_taggable:db:create


生成されたファイル

class AddActsAsTaggableTables < ActiveRecord::Migration
def self.up
create_table :tags do |t|
t.string :name
end

add_index :tags, :name

create_table :taggings do |t|
t.integer :tag_id, :taggable_id
t.string :taggable_type
end

add_index :taggings, [:tag_id, :taggable_type, :tag_id]
add_index :taggings, [:taggable_id, :taggable_type, :tag_id]
end

def self.down
drop_table :tags
drop_table :taggings
end
end


しかし、これではrake:migrate失敗

次のように修正

class AddActsAsTaggableTables < ActiveRecord::Migration
def self.up
create_table :tags do |t|
t.column :name, :string
end

create_table :taggings do |t|
t.column :tag_id, :integer
t.column :taggable_id, :integer
t.column :taggable_type, :string
end

add_index :taggings, :tag_id

end

def self.down
drop_table :tags
drop_table :taggings
end
end



テーブル作成

>rake db:migrate


あるモデル(タグ付けしたい)へ次のように記述

class Product < ActiveRecord::Base
acts_as_taggable
end



タグを付ける


View(create.rhtml等)

<%= text_field_tag 'tags',@product.tag_list %>

Controller
def create.rhtml
@product.tag_list = params[:tags]
@product.save
end


タグでよびだす。

controller
 def show
@tag = Tag.find(params[:tag_string])
@products = @tag.tagged
end

params[:tag_string]はタグの文字列

タグ:Rails
posted by sistailsnow at 20:32| Comment(0) | TrackBack(0) | Railを走ってみた | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/57740019
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。