`

插件介绍:auto-completion

阅读更多
由于rails2已经把自动完成(auto-completion)移出去了,2.0后的自动完成可以用下面的插件来完成。

atuo_complete插件提供输入提示功能,我们通过一个example来示范,用户在输入日志的tag时,有自动输入提供。

1. 创建测试工程:
$rails test_auto_complete
$cd test_auto_complete

2. 生成blog和tag模型:
$script/generate scaffold blog title:string content:string
$script/generate model tag name:string blog_id:integer

3. 映射一对多关系:
#app/models/blog.rb
has_many :tags

#app/models/tag.rb
belongs_to :blog


4. 添加测试数据:
#db/migrate/001_create_blogs.rb
Blog.create(:title => "test", :content => "test") 
#db/migrate/002_create_tags.rb
blog = blog.find(:first)
Tag.create(:name => "ruby", :blog_id => blog)
Tag.create(:name => "rails", :blog_id => blog)
Tag.create(:name => "agile", :blog_id => blog)
Tag.create(:name => "web", :blog_id => blog)


5. 生成数据表:
$rake db:migrate


6. 安装auto_complete插件:
$script/plugin install http://svn.rubyonrails.org/rails/plugins/auto_complete


7. 为controller添加auto_complete_for方法:
#app/controllers/blogs_controller.rb
auto_complete_for :tag, :name

8. 在routes中添加映射关系:
#config/routes.rb
map.resources :blogs, :collection => { :auto_complete_for_tag_name => :get }


9. 在view中添加需要提示功能的输入框:
#app/views/blogs/new.html.erb

Tags
<%= text_field_with_auto_complete :tag, :name, {}, {:method => :get} %>



10. 确保页面已经包含prototype库:
#app/views/layout/blogs.html.erb
<%= rubyscript_include_tag :defaults %>


11. 测试:
script/server
在浏览器中输入http://localhost:3000/blogs/new
在Tags输入框中输入r,系统将提示ruby和rails


12. 如果你想输入多个tag都有提示的话,比如用空格分开:
#app/views/blogs/new.html.erb
<%= text_field_with_auto_comlete :tag, :name, {}, {:method => :get, :token => ' '} %>
在Tags输入框中输入ruby on r,系统将提示ruby和rails

13. 如果你想在光标进入输入框就提示的话,可以这样做:
#app/views/blogs/new.html.erb
<%= text_field_with_auto_complete :tag, :name, {:onfocus => "tag_name_auto_completer.activate()"}, {:method => :get, :token => ' '} %>
在Tags输入框为空时,点击该输入框,系统将提示agile, rails, ruby, web


    以上测试环境是:Ruby 1.8.6 + Rails 2.0.2,点击这里下载源代码

Tips:
#Controller中可带参数有conditions, limit, order
class BlogController < ApplicationController
auto_complete_for :tag, :name, :limit => 15, :order => 'created_at DESC'
end 


#View中可待参数有两种:
#一是tag_options,与text_field的options相同
#二是completion_options,与prototype库的Ajax.AutoCompleter的options相同
<%= text_field_with_auto_complete :tag, :name, {:size => 10}, {:tokens => ' '} %>


这里还有一版不错的英文的用法介绍

示例一点:
def auto_complete_for_doctor_organization
  re = Regexp.new("^#{params[:doctor][:organization]}", "i")
  find_options = { :order => "name ASC" }
  @organizations = Organization.find(:all, find_options).collect(&:name).select { |org| org.match re }
        
  render :inline => "<%= content_tag(:ul, @organizations.map { |org| content_tag(:li, h(org)) }) %>"
end

map.auto_complete ':controller/:action', 
                  :requirements => { :action => /auto_complete_for_\S+/ },
                  :conditions => { :method => :get }
  • 大小: 8.2 KB
  • 大小: 9.8 KB
  • 大小: 8.7 KB
分享到:
评论
3 楼 angjunwen 2011-10-13  
我想实现的是在blog 中保存的是 tag 对象的 id ,不是tag 的 name ,不知有什么解决方法 ?
2 楼 angjunwen 2011-10-13  
你的模型定义是不是有问题?
class Tag < ActiveRecord::Base
  belongs_to :blog
end
class Blog < ActiveRecord::Base
  has_many :tags
end
是不是应该是:
class Tag < ActiveRecord::Base
  has_many :blog
end
class Blog < ActiveRecord::Base
  belongs_to :tags
end
还有blog表单提交后,blog 中tag对象没有保存进去该怎么处理?
1 楼 fl1429 2009-03-31  
不错...学习了!

相关推荐

    auto-complete+.el

    emacs 的自动补全插件可以在写代码时自动补全

    已经配置好的VIM配置文件,适合常规语言开发 NiceVimrc.tar.gz

    neocomplcache - Ultimate auto completion system for Vim. snipMate - Plugin for using TextMate-style snippets in Vim. supertab - Perform all your vim insert mode completions with Tab. delimitMate - ...

    Auto-GPT源码,可运行

    Auto-GPT是一款基于人工智能技术的开源软件,其主要功能是实现自动化的对话生成和文本 completion。这个项目可能是对OpenAI的GPT系列模型的一种扩展或优化,旨在提供更高效、更便捷的使用体验。让我们深入了解一下这...

    Auto Field Completion-crx插件

    **Auto Field Completion-crx插件**是一款专为提高在线表单填写效率而设计的浏览器扩展程序,尤其在预订房间等需要填写大量个人信息的场景中,它能极大地简化用户的工作流程,提升用户体验。这款插件主要面向英语...

    MyEclipse、Eclipse代码提示功能

    其中,代码提示(Code Completion)功能可以帮助开发者快速完成代码编写,减少输入错误,提高编码速度。本文将详细介绍MyEclipse与Eclipse这两个集成开发环境(IDE)中的代码提示功能配置方法。 #### 一、MyEclipse...

    spring boot 1.3.5 release

    - 使用Spring Boot Maven插件(Using the Spring Boot Maven plugin):介绍如何使用该插件。 - Gradle: - 指导如何在Gradle项目中使用Spring Boot。 - Ant: - 提供使用Ant构建工具的信息。 - 启动器...

    ctags插件下载地址亲测可用

    #### 知识点一:ctags插件介绍 ctags是一款功能强大的代码标签生成工具,主要用于为源代码文件创建索引标签,以便用户能够快速地导航至特定的函数、变量或类定义等。在开发过程中,特别是对于大型项目而言,使用...

    stm32cubeide自动补全插件.zip

    自动补全(Auto-Completion)是现代集成开发环境(IDE)中的一个重要特性,它能够帮助程序员快速输入代码,提高编码效率,减少错误。在STM32CubeIDE中,自动补全功能可以为STM32 HAL库、LL库以及CMSIS库的函数、宏...

    30分钟让你学会VIM(双语版)

    - **VIM插件**: 探索并安装一些流行的VIM插件,如Syntax Highlighting、Auto Completion等,以进一步提高编辑效率。 - **自定义配置**: 编辑`.vimrc`文件来自定义VIM的行为,如更改主题、设置自动缩进等。 - **...

    myeclipse快捷键

    【描述】:myeclipse快捷键是提高Java开发效率的重要工具,本文将介绍一些常用的和不常用的快捷键,以及如何优化myeclipse的性能。 【知识点详解】: 1. **优化myeclipse性能**: - **取消自动validation**:...

    vim配置文件

    2. **Auto-completion**:像YouCompleteMe或Neocomplete这样的插件可以提供智能代码补全,节省输入时间。 3. **Code Navigation**:像CtrlP这样的插件可以帮助快速跳转到函数定义或者文件中的特定位置。 4. **Error ...

    Eclipse快捷键总结

    - `Window &gt; Preferences &gt; Java &gt; Editor &gt; Completion Proposals &gt; Background color`: 设置代码补全建议的背景颜色。 #### 四、其他配置要点 - **手动验证功能**: - `Windows &gt; Preferences &gt; MyEclipse &gt; ...

    Harley Hahns的emacs field 指南

    - **代码补全与提示:** 安装Auto-Completion插件提升编码效率。 - **调试支持:** Emacs支持多种语言的调试工具,如GUD (Generic Un Debugger)。 - **代码审查与重构:** 使用Refactor Emacs进行代码重构操作。 ##...

    lazy-el:Emacs项目管理以及类似IDE的功能

    Emacs Lisp是一种强大的编程语言,用于编写Emacs的插件和配置,使得lazy-el可以根据个人需求进行定制。 5. **项目管理Emacs Lisp**:lazy-el不仅仅是对Emacs的增强,也是对Emacs Lisp生态的贡献。它展示了如何利用...

    brackets插件

    2. **代码提示与补全(Code Hinting and Auto-Completion)**:Brackets原生支持HTML、CSS和JavaScript的基本代码补全,但通过安装特定插件,如“Quick Docs JS”(对应quickdocsjs.rar),开发者可以获得更详尽的...

    An internal error occurred during: java.lang.NullPointerException

    3. **禁用代码完成**:在“Content Assist”页面中,取消勾选“Enable auto activation”选项。 4. **重启MyEclipse**:重启MyEclipse后,尝试再次启动Tomcat,观察是否还会出现同样的错误提示。 ### 总结 遇到...

    idea使用详细教程

    - **Auto Importing(自动导入)**:配置自动导入包的策略。 - **Appearance(外观)**:设置编辑器的视觉元素。 - **Code Completion(代码完成)**:设置代码补全功能。 - **Code Folding(代码折叠)**:设置...

    vim的java自动补全工具

    let g:java_complete_auto_popup = 1 ``` 无论你选择哪个插件,都需要确保系统中安装了 Java 开发工具(JDK),因为这些插件依赖于 `javap` 命令来获取类和方法信息。同时,你还需要安装 Ctags,这是一个通用的...

Global site tag (gtag.js) - Google Analytics