我正在使用Ruby on rails 2.3.8和acts_as_taggable_on插件.此插件生成三个表:标签(具有每个标签的ID和名称)和标签(与标记的项目相关的tag_ids).
现在,我想要使用某个tag_id标记所有标记的项目.所以,我转到我的公告模型(公告是标记的项目),我想写这样的东西:
def find_by_category(tag_id)
Announcement.tagged_with(tag_id) #this doesn't exist.
end
Run Code Online (Sandbox Code Playgroud)
但我发现的唯一方法是:
Announcement.tagged_with(tag_NAME) #this works, but I don't want to find by a name.
Run Code Online (Sandbox Code Playgroud)
有没有人知道实现这个的方法,或者至少,如何修改插件的代码来做到这一点?
查找没有标签的条目的正确方法是什么?
我尝试使用,Entry.tagged_with(nil)但它只是返回一个空哈希。
我需要它,所以我可以列出仍需要标记的条目。
谢谢。
我正在使用act-as-taggable-on.我有文章模型:
class Article < ActiveRecord::Base
acts_as_taggable_on :tags
end
Run Code Online (Sandbox Code Playgroud)
我知道如何查找标签为"tag"的所有文章.根据README,解决方案是:Article.tagged_with("tag").
但如何找到没有任何标签的所有文章?
看起来acts-as-taggable-on 在它设置的数据表中使用了多态关系。我如何让它与 minitest 中的装置一起工作?
我有一个Lead实现的模型acts-as-taggable。看起来这将以下内容添加到模型中:
has_many :taggings, :as => :taggable, :dependent => :destroy, :class_name => "ActsAsTaggableOn::Tagging"
has_many :base_tags, :through => :taggings, :source => :tag, :class_name => "ActsAsTaggableOn::Tag"
Run Code Online (Sandbox Code Playgroud)
我的线索表:
create_table "leads", force: true do |t|
t.string "name"
t.string "email"
t.string "phone"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "user_id"
end
Run Code Online (Sandbox Code Playgroud)
由acts-as-taggable-on 创建的表:
create_table "taggings", force: true do |t|
t.integer "tag_id"
t.integer "taggable_id"
t.string "taggable_type"
t.integer "tagger_id"
t.string "tagger_type"
t.string "context", limit: 128
t.datetime "created_at"
end
add_index "taggings", ["tag_id", "taggable_id", …Run Code Online (Sandbox Code Playgroud) 我想在我的应用程序中添加标记工具.所以,我正在使用acts_as_taggable_on:https://github.com/mbleigh/acts-as-taggable-on
我添加了以下行我的Gemfile:
gem 'acts-as-taggable-on', '~> 2.2.2'
Run Code Online (Sandbox Code Playgroud)
当我在我的用户模型中添加以下行时:
acts_as_taggable_on
Run Code Online (Sandbox Code Playgroud)
它给了我这个错误:
undefined local variable or method `acts_as_taggable_on' for User:Class
Run Code Online (Sandbox Code Playgroud)
请告诉我,我做错了什么?