每天一剂Rails良药之Tagging 博客分类: Ruby RailsActiveRecordSocialRubyUP
程序员文章站
2024-03-05 08:52:00
...
“social networking”产生了一个东西叫“tagging”,而DHH为Rails写了一个acts_as_taggable插件,简化了Rails开发tagging功能
acts_as_taggable依赖于Rails的polymorphic associations feature,允许对任何model进行tag
1,安装插件
2,建立数据库表
由于model和tag是Many-to-Many的关系,我们需要建立如下migration
其中taggings表为关系表,为model(taggable)和tag建立多对多关联
3,例子
在model类定义里加上acts_as_taggable即可让该model具有tagging的功能
Tag.find_by_name(tag_name).tagged即可得到name为tag_name的Tag的contacts(如果对多个model进行tagging,可能要对taggings表的taggable_type进行查询)
contact.tag_with(params[:tag_list])则用以空格分隔的tag名列表来对该contact对象进行tagging,如果tags表没有某tag,则new一个该tag
acts_as_taggable依赖于Rails的polymorphic associations feature,允许对任何model进行tag
1,安装插件
ruby script/plugin install legacy
2,建立数据库表
由于model和tag是Many-to-Many的关系,我们需要建立如下migration
class AddDatabaseStructureForTagging < ActiveRecord::Migration def self.up create_table :tags do |t| t.column :name, :string end create_table :taggings do |t| t.column :taggable_id, :integer t.column :tag_id, :integer t.column :taggable_type, :string end end def self.down drop_table :tags drop_table :taggings end
其中taggings表为关系表,为model(taggable)和tag建立多对多关联
3,例子
class Contact < ActiveRecord::Base acts_as_taggable end
在model类定义里加上acts_as_taggable即可让该model具有tagging的功能
class ContactsController < ApplicationController def list @contacts = if tag_name = params[:id] Tag.find_by_name(tag_name).tagged else Contact.find(:all) end def tag contact = Contact.find(params[:id]) contact.tag_with(params[:tag_list]) contact.save end end
Tag.find_by_name(tag_name).tagged即可得到name为tag_name的Tag的contacts(如果对多个model进行tagging,可能要对taggings表的taggable_type进行查询)
contact.tag_with(params[:tag_list])则用以空格分隔的tag名列表来对该contact对象进行tagging,如果tags表没有某tag,则new一个该tag
上一篇: java实现腾讯ocr图片识别接口调用
下一篇: Java中final变量使用总结