`

acts_as_taggable Plugin 使用方式

阅读更多
Tag 似乎是目前所有Web2.0網站所必備的功能,也有人這樣講「沒有 Tag 就不是 Web 2.0 的網站」。雖然綜觀 Web 2.0 的定義,跟 tag 似乎一點關係都沒有 XD ,不過這完全不要緊,tag 不管是不是 Web 2.0,他對於「歸類」這檔事所帶來的影響是跟「分類」一樣重大的。

Rails 上面要實踐 tag 功能最簡單的就是使用 acts_as_taggable 來做,說到這個 acts_as_taggable 可能會令人有點 confuse,他分成 Plugin 版本,跟 Gem 版本的。兩者實做方式不太一樣, Plugin 版本跟 Gem 版本最大的不同呢,就是 Plugin 版本 acts_as_taggable 他是使用兩個 table 就可以表示許多個 Model 的 tag,你不需要使用多個 table 來表示不同 Model 的 Tag ,再這一點來看,的確是一個不錯的設計,而 GEM 版本的 acts_as_taggable 你必須每個 Model 的都新增一個 table 來表示 tag。也因為設計哲學上面的不同,也有投票來投到底那個比較好。

我們這裡先介紹 Plugin。要先注意到的,act_as_taggable plugin 是depend on Rails 1.1 以上的,所以你必須使用 Rails 1.1 以上的版本。

安裝 acts_as_taggable

script/plugin install acts_as_taggable

建立相關 table

script/generate migration add_tag_support

在 db/migrate/ 檔案裡面這樣寫

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
然後打入

rake migrate

建立相關 table。

設定 Model

設定方式沒有比這個更簡單了,就是在你要下 tag 的 Model 寫入
class ModelName < ActiveRecord::Base
acts_as_taggable
end
即可。

開始使用

下 tag

如果要對其中一個 Model 物件下 tag ,tag 內容是 'abc def ghi',代表這是一個字串,每個 tag pattern 用空白隔開。那我們就可以這樣下 tag
obj.tag_with( 'abc def ghi')
取出這個 Model 所有的 tag

如果,要取出這個 Model 物件下面的 tag,那就
obj.tags
這是一個 tag 的 array ,裡面每個東西都是一個 tag 物件,如果想要取出這個 tag array 的每個 tag name,就這樣用
obj.tags.each { |tag| puts tag.name }
即可。

尋找同一個 tag 的所有 entry

如果要搜尋這個 Model 底下所有下這個 tag 的 entry,就這樣使用
obj.find_tagged_with('abc')
他會回傳同一個 Model array,裡面是有下這個 tag 的 Model 物件。

覆蓋掉 tag

如果想用新的 tag ,就直接用 tag_with 覆蓋掉即可
obj.tag_with('new tag')
即可

刪除其中一個 tag

只想刪除掉其中一個 tag ,那就用 ActiveRecord 裡面的 destroy 即可,下面例子就是刪除 tag id 等於 1的 tag ,但是不刪除其他 tag
obj.tags.each do |tag|
tag.destroy if tag.id == 1
end

這樣即可。
分享到:
评论

相关推荐

    acts_as_list.rar

    acts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_list.raracts_as_...

    acts_as_list, 用于管理列表的ActiveRecord插件.zip

    acts_as_list, 用于管理列表的ActiveRecord插件 ActsAsList描述这个 acts_as 扩展提供了对列表中的多个对象进行排序和重新排序的功能。 具有指定的类的类需要在映射的数据库表上定义为整数的position 列。 0.8.0升级...

    acts_as_category:想想acts_as_tree +权限

    #ActsAsCategory acts_as_category (Version 2.0 beta)acts_as_category,是acts_as插件在acts_as_tree风格的Ruby on Rails的ActiveRecord的模式,但有一些额外的功能,以及多种便捷视图助手。例子(有关实例方法和...

    acts_as_authenticated

    NULL 博文链接:https://moyuan.iteye.com/blog/263902

    rails_admin_acts_as_list:rails_admin插件以对记录进行排序

    介绍插件,用于对记录进行排序(使用 gem)安装要启用rails_admin_acts_as_list,请将以下内容添加到您的Gemfile : gem 'rails_admin_acts_as_list'gem 'rails_admin' 重要提示: rails_admin_acts_as_list之前必须...

    acts_as_restful_list:就像acts_as_list一样,但很安静

    就像acts_as_list 一样,但不必使用非标准方法调用(如insert_at)来弄乱您的代码,acts_as_restful_list 使管理列表变得简单。 您可以像更新其他任何内容一样更新 position 属性,其余的都由您来处理。 特点 通过...

    active_record-acts_as, 模拟activerecord模型的多表继承.zip

    active_record-acts_as, 模拟activerecord模型的多表继承 插件开发已经移动这个项目的积极发展已经转移到了的krautcomputing fork 。 请在那里报告问题并打开 PRs ! ActiveRecord::ActsAs这是对 acts_as_relation的...

    acts_as_paranoid:ActiveRecord插件可让您隐藏和还原记录,而无需实际删除它们

    支持该分支仅针对Rails 5.2+和Ruby 2.4+ 如果您使用的是Rails 5.1或更早的版本,或者Ruby 2.3或更早的版本,请切换到相应的分支,或者需要一个更旧版本的acts_as_paranoid gem。已知的问题在同一模型上使用acts_as_...

    Api-acts_as_api.zip

    Api-acts_as_api.zip,使在rails中创建api响应变得简单和有趣,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api简化了编程...

    acts_as_liked:向任何 Active Record 模型添加类似功能

    gem 'acts_as_liked' 然后执行: $ bundle 运行生成器: $ rails generate acts_as_liked 并且不要忘记迁移您的数据库 $ rake db:migrate 用法 可爱的模特 将acts_as_likeable添加到任何模型,它的实例可以被...

    acts_as_commentable_with_threading:类似于acts_as_commentable; 然而,利用 awesome_nested_set 提供线程评论

    与acts_as_commentable 兼容(但需要更改数据库架构) 要求 此 gem 的 2.x 版本仅适用于 Rails 4 及更高版本。 对于此 gem 的 Rails 3.x 兼容版本,请使用版本 1.2.0。 这个宝石取决于 CollectiveIdea 的 Awesome ...

    actions_as_commentable:ActiveRecord acts_as_commentable插件

    gem 'acts_as_commentable' Rails gem 'acts_as_commentable' , '3.0.1' Rails gem 'acts_as_commentable' , git: 'git@github.com:jackdempsey/acts_as_commentable.git' , branch: '2.x' 生成器 Rails 3+ ...

    acts_as_aliased:扩展 ActiveRecord

    使用acts_as_aliased在模型中启用别名: model Company &lt; ActiveRecord::Base acts_as_aliased end 这假设您的公司模型中有一个名为name的列。 您可以通过传递column参数来指定不同的column : model ...

    acts_as_shopping_cart:简单的购物车实施

    acts_as_shopping_cart 一个简单的购物车实现。 您可以找到示例应用程序。 安装 滑轨3 从0.2.0版开始,不再支持Rails 3。 如果您仍需要在Rails 3应用程序中实现此gem,请使用0-1-x分支 将其包含在您的Gemfile中 ...

    ruby on rails 相关lib

    ruby on rails 相关lib 其中包含:rspec flexmock acts_as_taggable-2.0.2 widgets acts_as_list classic_pagination

    acts_as_paranoid

    NULL 博文链接:https://moyuan.iteye.com/blog/263853

    acts_as_reference_data

    ActiveRecord::Base acts_as_reference_dataend假设已创建迁移以使用各种类型填充此表,例如SMS或EMAIL 。 这允许我们使用来自代码库的一致指针来引用这些数据库对象: if criteria_type == :mobile_number send_...

    acts_as_snapchat:使您的 Active Record 模型表现得像 Snapchat 上的内容

    act_as_snapchat!! 您是否曾经希望 Active Record 表现得像 Snapchat? 终于来了!... 如果您是 Node.js 开发人员,您可能更喜欢使用别名acts_as_mongodb 。 贡献 分叉它( ) 创建您的功能分支( git c

    acts_as_realtime:Gem 以简单的方式为您的索引添加实时功能

    这个gem的使用很简单,你只需要在我们想要的带有实时索引的模型中执行acts_as_realtime方法,该方法可以携带一系列参数来稍微修改行为和其他强制性参数,但这些将是后面解释了,另外一步就是在视图中插入必要的代码...

    acts_as_owner.rb:Rails 的简单所有权解决方案

    作为所有者 :warning: 这颗宝石已经过时了。 请不要使用它。 Acts as owner 是 Ruby ...所有者模型只是必须声明得益于acts_as_owner ,通过一个块传递的每个可拥有对象(使用owns_one或owns_many方法)。 例子 class

Global site tag (gtag.js) - Google Analytics