How to make multi tag_cloud model using connection table?

I have a join table

create_table "combine_tags", force: true do |t| t.integer "user_id" t.integer "habit_id" t.integer "valuation_id" t.integer "goal_id" t.integer "quantified_id" end 

whose purpose is to create a tag_cloud function for several models. I put this in application_controller

 def tag_cloud @tags = CombineTag.tag_counts_on(:tags) end 

My tag_cloud is as follows:

 <% tag_cloud(@tags, %w(css1 css2 css3 css4)) do |tag, css_class| %> <%= link_to tag.name, tag_path(tag), :class => css_class %> <% end %> # or this depending on which works: <% tag_cloud CombineTag.tag_counts, %w[sml] do |tag, css_class| %> <%= link_to tag.name, tag_path(tag.name), class: css_class %> <% end %> 

I have this line in _form for all models: <%= f.text_field :tag_list %>

combine_tags_helper

 module CombineTagsHelper include ActsAsTaggableOn::TagsHelper end 

model

 class CombineTag < ActiveRecord::Base belongs_to :habit belongs_to :goal belongs_to :quantified belongs_to :valuation belongs_to :user acts_as_taggable end class Habit < ActiveRecord::Base # Same goes for other models has_many :combine_tags acts_as_taggable end 

Please let me know if you need further explanation or code to help you help :)

+7
ruby ruby-on-rails tags rails-activerecord acts-as-taggable-on
source share
1 answer

In my opinion, you could use polymorphism. See Active Recording Associations

In your case, the model may be as follows:

 class Tag < ActiveRecord::Base belongs_to :taggable, polymorphic: true .... class Habit < ActiveRecord::Base has_many :tags, as: :taggable .... class Goal < ActiveRecord::Base has_many :tags, as: :taggable .... 

And in the transitions:

 create_table :tags , force: true do |t| t.references :taggable, polymorphic: true, index: true t.timestamps null: false end 

After that you can:

 @tags = Tag.include(:taggable) @tags.each do |tag| type = tag.taggable_type # string, some of 'habit', 'goal' etc id = tag.taggable_id # id of 'habit', 'goal' etc end 
+1
source share

All Articles