2009-07-21 2 views
2

Я пытаюсь найти лучшее решение:Лучшие практики: Несколько категорий - лучший плагин для него (действует как taggable, действует как дерево, ...)

У меня есть usermodel и пользователь должен иметь возможность для сохранения ключевых слов (нескольких контекстов), которые он интересует.

F.e.

User-interessts: 

Sports: Checkbox(CB) fishing, CB Skyying, CB Tennis, CB Soccer 

Music: CB Metal, CB Techno, CB Folk, CB Charts, ... 

и так далее ...

После того, как пользователь сохраняет свой выбор, я хотел бы предложить следующий поиск-функциональность:

find by main category(input: sports, music,....) 

find by keyword (input: sports, music, metal, fishing,....) 

find by most viewed (show data with the most associated users) 

и я хотел бы иметь автогенерируемый tag-cloud (например, act_as_taggable_on обеспечивает)

Кроме того, было бы здорово, если бы списки были легко администрированы - например, теги не могут использоваться как основные и подкатегории (возможно, s работает с tag_contexts) ...?

Я пробовал это, чтобы создать с act_as_tree, но это не было ограничено. Затем я попробовал его с действиями как taggable, но я не понимаю, как я могу получить доступ к модели тегов (в моей папке с образцами нет файла tag.rb).

Вы можете мне помочь? У вас есть лучшее решение?

Благодаря

+0

Файл tag.rb будет располагаться вместе с файлами плагина. Прошло некоторое время с тех пор, как я работал с рельсами, поэтому теперь он, вероятно, является частью ядра rails, но раньше он был в версии vendor/plugin/act_as_taggable/model или что-то в этом роде. – mveerman

+0

Хм ... Но как я могу расширить этот класс? – Lichtamberg

ответ

4

Это звучит почти так же, как и то, что "acts-as-taggable-on" предоставляет.

Из ридми:

 
class User < ActiveRecord::Base 
    acts_as_taggable_on :tags, :skills, :interests 
end 

@user = User.new(:name => "Bobby") 
@user.tag_list = "awesome, slick, hefty"  # this should be familiar 
@user.skill_list = "joking, clowning, boxing" # but you can do it for any context! 
@user.skill_list # => ["joking","clowning","boxing"] as TagList 
@user.save 

@user.tags # => [<Tag name:"awesome">,%lt;Tag name:"slick">,<Tag name:"hefty">] 
@user.skills # => [<Tag name:"joking">,<Tag name:"clowning">,<Tag name:"boxing">] 

# example finds: 
User.tagged_with("awesome", :on => :tags) # => [@user] 
User.tagged_with("awesome", :on => :skills) # => [] 
1

Стоит отметить, что вы всегда можете получить tag.rb, используя ниже.

<% ActsAsTaggableOn::Tag.example_method_on_class %>