7

Ben tablo, amacı çoklu modeller için bir tag_cloud çalışması yapmaktırBirleştirme tablosuyla çoklu model tag_cloud nasıl oluşturulur?

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 

katılmasıdır. Ben

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

Benim tag_cloud şöyle application_controller içinde koymak: <%= f.text_field :tag_list %>

:

<% 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[s m l] do |tag, css_class| %> 
    <%= link_to tag.name, tag_path(tag.name), class: css_class %> 
<% end %> 

Ben _form tüm modellerin bu çizgi var combine_tags_helper

module CombineTagsHelper 
    include ActsAsTaggableOn::TagsHelper 
end 

modelleri

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 

Eğer daha fazla açıklama ya code yardım gerekiyorsa bana bildirin Eğer

bana :) yardım
+0

söyler misin Kısaca uygulamak için tam olarak ne arıyorsunuz? –

+0

Bir modelle bir tag_cloud yapmayı biliyorum, ancak birden fazla modelle çalışamıyorum, burada alışkanlıklar altında 'run' adında bir etiket oluşturdum ve tag_cloud'un etiketin kullanım oranını orantıda temsil edeceği hedefler altında. Bu @RrupRakshit yardımcı olur mu? –

+0

Usecase hakkında bana biraz bilgi verir misin? neden anlamak için _join_table_ ihtiyacınız var? –

cevap

1

Benim görüşüme göre, polimorflamayı kullanabilirsiniz. Your durumda Active Record Associations

bakınız, Model sonraki olabilir:

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 
.... 

Ve göçlerde:

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

Bundan sonra Şunları yapabilirsiniz:

@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