如何在Stack Overflow或Quora上创建标记系统

Jus*_*zer 10 ruby tagging ruby-on-rails ruby-on-rails-3

我想在Stack Overflow或Quora上创建一个标记系统.这将是它自己的模型,我打算使用这个自动完成插件来帮助用户找到标签.我有一些问题:

  1. 我希望标签完全由用户生成.如果用户通过键入并按"添加"按钮输入新标签,则该标签将添加到数据库中,但如果用户键入现有标签,则使用该标签.我正在考虑使用这样的代码:

    def create
    
    @video.tags = find_or_create_by_name(@video.tags.name)
    
    end
    
    Run Code Online (Sandbox Code Playgroud)

    我是在正确的轨道上吗?

  2. 我想在Stack Overflow或Quora上实现类似的功能,当您从建议列表中单击标记或单击"添加"按钮时,该标记将添加到带有ajax的文本字段正上方.我将如何实现类似的东西?

我知道这是一个开放式的问题.我并不是在寻找确切的代码,而是在正确的方向上进行一般性的推动.当然,代码示例不会受到伤害:)

注意我不是在寻求有关如何设置jQuery自动完成插件的帮助......我知道如何做到这一点.相反,似乎我必须修改插件中的代码,以便在文本字段中添加标签,而不是在文本字段中添加标签.我很欣赏这方面的任何方向.

Yar*_*boy 13

mbleigh的acts_as_taggable_on gem是一个功能完备的解决方案,你应该更仔细地看一下.该实施方案坚如磐石,使用灵活.但是,它主要涉及将标记附加到对象,检索对象上的标记以及搜索标记的项目.这是所有后端服务器的东西.

您希望更改的大部分功能(基于您的评论)实际上更多地与您的前端UI实现相关,并且gem在那里并没有真正为您做多少.我会一个接一个地提出你的要求.

  1. 如果用户输入新标记,则添加该标记,如果用户输入现有标记,则使用现有标记.acts_as_taggable_on这样做.
  2. 单击建议列表中的标记以添加该标记.这是一个实现问题 - 在后端,您需要收集建议的标签列表,然后在演示文稿中显示这些标签作为处理功能的链接.
  3. 用户输入潜在标签时自动完成.您将对从标签表中提取的项目列表使用jQuery自动完成插件.使用额外的jQuery,您可以捕获他们选择其中一个选项,或完成输入新标记,然后调用处理函数.
  4. 限制用户只输入一个标签.这将是您的UI实现 - 一旦他们输入或选择了标签,您就可以对其进行处理.如果他们输入两个用逗号分隔的单词,那么在处理之前或处理期间,您必须将其视为一个标记,或者仅将文本放到第一个逗号并丢弃其余标记.
  5. 处理添加标记时,您将需要做两件事.首先,您需要处理UI显示更改以反映已输入/选择的标记.这包括将标签放在"选择"区域,将其从"可用"显示中删除,更新任何计数器等.其次,您需要向服务器发送请求以实际将标签添加到对象并持续存在这个事实到数据库(可标记的gem将为你接管).您可以通过每个标记的单独AJAX请求执行此操作,也可以在提交表单时处理它.如果是后者,则需要一个var来保留已添加/删除的标记的运行列表,并且您需要代码来处理向该var添加/删除值.

有关在编辑时保存标记但在保存表单之前不发送到服务器/ db的示例,您可以查看Tumblr新帖子页面上的标记功能.您可以在创建帖子时随意添加/删除标签,但在您单击保存之前,它们都不会进入数据库.

正如您所看到的,大部分内容都由您来确定和编码,但与后端部分几乎没有关系.宝石将很好地照顾你.

我希望这有助于您朝着正确的方向前进.