Im Using Rails 5.1 , and i use acts-as-taggable-on gem https://rubygems.org/gems/acts-as-taggable-on inside my post model.
I want to ask how to display all list of my tags inside my posts index ?
For example. I have tags named shoes, wallet, watch. I want to show those tags in my post index. When i clicked shoes,it will render all posts that linked with shoes tag.
My Schema:
create_table "taggings", id: :serial, force: :cascade do |t|
t.integer "tag_id"
t.string "taggable_type"
t.integer "taggable_id"
t.string "tagger_type"
t.integer "tagger_id"
t.string "context", limit: 128
t.datetime "created_at"
t.index ["context"], name: "index_taggings_on_context"
t.index ["tag_id", "taggable_id", "taggable_type", "context", "tagger_id", "tagger_type"], name: "taggings_idx", unique: true
t.index ["tag_id"], name: "index_taggings_on_tag_id"
t.index ["taggable_id", "taggable_type", "context"], name: "index_taggings_on_taggable_id_and_taggable_type_and_context"
t.index ["taggable_id", "taggable_type", "tagger_id", "context"], name: "taggings_idy"
t.index ["taggable_id"], name: "index_taggings_on_taggable_id"
t.index ["taggable_type"], name: "index_taggings_on_taggable_type"
t.index ["tagger_id", "tagger_type"], name: "index_taggings_on_tagger_id_and_tagger_type"
t.index ["tagger_id"], name: "index_taggings_on_tagger_id"
end
My post controller
def index
@posts = Post.list_for(params[:page], params[:tag]).search(params[:search])
end
Thank you for helping me.
Retrieve all tags:
ActsAsTaggableOn::Tag.all
Check this link for more info: https://github.com/mbleigh/acts-as-taggable-on/wiki/Tutorial-for-Posts#controller
There also possible to retrieve tags by context, check this: https://github.com/mbleigh/acts-as-taggable-on/wiki/Get-all-tags-by-context
Notice!
ActsAsTaggableOn::Tag
is a simple ActiveRecord model. So you can invoke query on it like:
existing_posts_tags = ActsAsTaggableOn::Tag.joins(:taggings).where(taggings: { teggable_type: 'Post' })