如何在Rails中为自动完成添加标记到现有模型?

deb*_*deb 28 jquery tagging autocomplete ruby-on-rails acts-as-taggable

我正在尝试Article在Rails 3应用程序中为模型添加"标签" .

我想知道是否有一个gem或插件添加了模型中的"标记"功能以及视图的自动完成帮助程序.

我发现acts_as_taggable但是我不确定这是不是我应该使用的.有更新的东西吗?我从2007年google acts_as_taggable获得了结果

Tim*_*ord 53

acts_as_taggable_onrails3-jquery-autocomplete可以很好地协同工作,制作类似SO的标记系统,请参见下面的示例.对于rails来说,我认为还没有合适的all in one选项.

请按照以下步骤安装全部:

1.备份你的rails应用程序!

2.安装jquery-rails

注意:您可以安装jQuery UI,jquery-rails但我选择不这样做.

3.下载并安装jQuery UI

选择一个与您的网页设计相称的主题(请务必使用您选择的主题测试自动完成演示,默认主题对我不起作用).下载自定义zip并将[zipfile]/js/jquery-ui-#.#.#.custom.min.js文件放入应用程序的/public/javascripts/文件夹中.将[zipfile]/css/custom-theme/文件夹和所有文件放入应用程序的public/stylesheets/custom-theme/文件夹中.

4.将以下内容添加到Gemfile中,然后运行"bundle install"

宝石'act-as-taggable-on'gem'rail3
-jquery-autocomplete'

5.从控制台运行以下命令:

rails generate acts_as_taggable_on:migration
rake db:migrate
rails generate autocomplete:install

在您的应用中进行这些更改

在您的应用程序布局中包含必要的javascript和css文件:

<%= stylesheet_link_tag "application", "custom-theme/jquery-ui-1.8.9.custom" %>  
<%= javascript_include_tag :defaults, "jquery-ui-#.#.#.custom.min", "autocomplete-rails" %>
Run Code Online (Sandbox Code Playgroud)

控制器示例

编辑:根据Seth Pellegrino的评论做出改变.

class ArticlesController < Admin::BaseController  
  #autocomplete :tag, :name  <- Old   
  autocomplete :tag, :name, :class_name => 'ActsAsTaggableOn::Tag' # <- New
end
Run Code Online (Sandbox Code Playgroud)

模型示例

class Article < ActiveRecord::Base
   acts_as_taggable_on :tags
end
Run Code Online (Sandbox Code Playgroud)

Route.rb

resources :articles do
  get :autocomplete_tag_name, :on => :collection    
end
Run Code Online (Sandbox Code Playgroud)

查看示例

<%= form_for(@article) do |f| %>
  <%= f.autocomplete_field :tag_list, autocomplete_tag_name_articles_path, :"data-delimiter" => ', ' %> 
  # note tag_list above is a virtual column created by acts_as_taggable_on
<% end %> 
Run Code Online (Sandbox Code Playgroud)

注意:此示例假定您仅在整个应用程序中标记一个模型,并且您只使用默认标记类型:标记.基本上上面的代码将搜索所有标签,而不是将它们限制为"Article"标签.

  • @TimSanteford当acts_as_taggable_on为[namespaced](https://github.com/mbleigh/acts-as-taggable-on/commit/b90ce697f0852a1d87f64f9342c07c94d5822435)时,上面的解决方案似乎已经破裂了.更改自动完成行以显式指定标记类(例如`autocomplete:tag,:name,:class_name =>'ActsAsTaggableOn :: Tag'`)可以使所有内容重新启动并运行. (6认同)
  • @deb - 通过查看源html确认包含jquery和jquery ui,autocomplete-rails js文件.另外,请确保还包含ui css文件.您使用Firebug进行调试吗? (4认同)
  • 为什么第一项是"备份您的rails应用"?当然你的rails应用程序已经受版本控制,因此你不需要备份它,你有所有版本变化吗? (4认同)
  • @deb - 太棒了!我认为这个解决方案更复杂,任何一个使用都会喜欢.但我认为这两个插件都已经很好地建立起来并且有自己的优势.如果我将来找到更优雅的解决方案,我会尝试在此发布. (3认同)

Lev*_*sol 6

acts_as_taggable_on_steroids宝石可能是你最好的选择.我发现许多标记宝石更像是一个"开始的好地方",但后来需要大量的自定义来获得你想要的结果.