7

mam dołączyć stółJak zrobić tag_cloud z wieloma modelami z tabelą sprzężenia?

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 

którego celem jest wykonanie prac tag_cloud dla wielu modeli. Ja to w application_controller

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

Moja tag_cloud wygląda następująco:

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

Mam ten wiersz w _form wszystkich modeli: <%= f.text_field :tag_list %>

combine_tags_helper

module CombineTagsHelper 
    include ActsAsTaggableOn::TagsHelper 
end 

modele

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 

Proszę dać mi znać, jeśli potrzebujesz dodatkowych wyjaśnień lub code aby pomóc mnie :) pomóc

+0

możesz mi powiedzieć w skrócie, jakie dokładnie zachowanie chcesz wprowadzić? –

+0

Wiem, jak zrobić tag_cloud z jednym modelem, ale nie mogę go uruchomić z wieloma modelami, w przypadku gdy utworzyłem tag o nazwie 'run' w nawykach i pod celami, które tag_cloud będzie reprezentować użycie znacznika proporcjonalnie. Czy to pomaga @ArupRakshit? –

+0

możesz mi powiedzieć o tym przypadku? dlaczego potrzebujesz _join_table_, próbując zrozumieć? –

Odpowiedz

1

Moim zdaniem można użyć polimorphing. Proszę zobaczyć Active Record Associations

w przypadku, model mógłby być następny:

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

aw migracje:

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

Po tym Można:

@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 
Powiązane problemy