7

У меня есть присоединиться таблицаКак сделать мульти модель tag_cloud с помощью таблицы соединений?

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 

, целью которого является сделать tag_cloud работу для нескольких моделей. Я положил это в application_controller

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

Мой tag_cloud выглядит следующим образом:

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

У меня есть эта линия в _form всех моделей: <%= f.text_field :tag_list %>

combine_tags_helper

module CombineTagsHelper 
    include ActsAsTaggableOn::TagsHelper 
end 

модели

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 

Пожалуйста, дайте мне знать, если вам нужна дополнительная объяснение или code, чтобы помочь вам помочь мне :)

+0

Можете ли вы сказать мне, вкратце, какое точное поведение вы ищете для реализации? –

+0

Я знаю, как создать tag_cloud с одной моделью, но я не могу заставить ее работать с несколькими моделями, если бы я создал тег под названием «run» под привычками и под целями, которые tag_cloud будет представлять собой использование тега пропорционально. Помогает ли это @ArupRakshit? –

+0

Можете ли вы рассказать мне об использовании? зачем вам _join_table_ пытаться понять? –

ответ

1

На мой взгляд, вы можете использовать полиморфизм. Пожалуйста, см Active Record Associations

В вашем случае, модель может быть следующим:

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

И в миграции:

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

После этого Вы можете:

@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 

 Смежные вопросы

  • Нет связанных вопросов^_^