我想知道acts_as_taggable gem是否适合我的情况。
我想要实现的是管理员可以添加具有特定上下文的标签列表,用户可以根据上下文选择其中一些标签。
例如,管理员可以创建以下标记:
并且用户1将选择(例如):
我的问题是,关于acts_as_taggable表,表Tag仅包含名称。上下文仅与标记相关联。
这样,我可以在Tag中添加“context”字段吗?
并像这样创建我的标签:
list = [{name: 'tag 1', context: 'context 1'}, {name: 'tag 2', context: 'context 2' }, ...]
list.each do |tag|
ActsAsTaggableOn::Tag.new(name: tag[:name], context: tag[:context]).save
end
并显示如下:
skill_tags = ActsAsTaggableOn::Tag.where(context: skills)
或API有特定方法可以适合我的情况?或从头开始做什么?
(基本上,我想要实现的系统非常类似于“最喜欢的标签”,“忽略标签”上的SO)
感谢您的建议!
答案 0 :(得分:0)
绝对可以在您的情况下使用。
也许您的用例要求您保存" context"在标签上,但我不知道你为什么会这样做。看起来你更适合在用户类中使用密钥,更好的是将YAML文件作为密钥。例如,您的yaml文件可能如下所示:
Behavior:
- Analytics
- Curious
IT:
- Ruby
- Python
然后在用户
上使您的YAML文件保持不变TRAITS_KEY = YAML.load_file({path_to_yaml_file})
然后你可以在任何需要的地方打电话
User::TRAITS_KEY['Behavior'] <= would return ['Analytics', 'Curious']
然后在创建选择框时,仅根据上下文提供标记选项。您可以将密钥设置为您的上下文,然后选项只是该上下文中的数组中的选项。暗示当使用&#34; Ruby&#34;标记某些东西时。它是基于您的YAML文件的IT技能。然后再次搜索时,您可以使用YAML文件(取自本示例中编辑的acts_as_taggable文档)
# Find users that matches all given tags ('Super Coders'):
User.tagged_with(User::TRAITS_KEY['IT'], :match_all => true)
# Find users with any of the specified tags ('Any one with dev skills'):
User.tagged_with(User::TRAITS_KEY['IT'], :any => true)
# Find users that has not been tagged with it tags ('Non Devs'):
User.tagged_with(User::TRAITS_KEY['IT'], :exclude => true)
他们的文档非常有用。但我不知道需要在标签上保存上下文。作为警告,我没有测试上面的任何代码,它都是从内存和/或查看我有类似需求的现有项目完成的。这至少应该为您提供我如何处理这个问题的概念。
希望这有帮助!