随笔-167  评论-65  文章-0  trackbacks-0

rails2.0之前类库里已经封装了自动完成功能,rails2.0以后被分离了出来,作为插件使用.

插件作用:能够实现自动完成 和 自动提示 功能

我的环境:ruby1.8.6 + rails 2.1.0

效果预览:

image

image

使用案例一:(简单的使用)

1,下载插件

 

(1),直接到网站上下载 http://github.com/rails/auto_complete/tree/master

(2),在项目中下载,进入项目目录 输入 ruby script/plugin auto_complete 自动安装插件到项目下,默认是从http://dev.rubyonrails.com/svn/rails/plugins 站点下载的,所以完整的下载路径是

ruby script/plugin install http://dev.rubyonrails.com/svn/rails/plugins/auto_complete/

这里可以利用 ruby script/plugin list 查看有哪些插件可以下载

image

2,直接按照插件的 readme 操作(请查看插件的readme)

# Controller
class BlogController < ApplicationController
auto_complete_for :post, :title #post对应着model(即表),title对应着表的一个字段
end

# View
<%= text_field_with_auto_complete :post, title %>

3,在layouts下 新建一个blog.rhtml,把下面代码包括进来

<%= javascript_include_tag :defaults %>

4,如果到这里你还是没有成功的话,建议在controller中添加

skip_before_filter :verify_authenticity_token, :only => [:auto_complete_for_post_title] #我做的时候就是加了这个skip filter的,不然运行不稳定

5,ok....success!

案列二:(加一些约束条件)

其它步骤基本不变,可以在model中指定显示的条数和字段 什么的

eg:

Model中:

class Fruit < ActiveRecord::Base
# 定义一个查询方法,
def self.find_fruit_by_part(part)
# 查询出所有name匹配part的水果实体,最多显示5条
Fruit.find(:all,    :conditions => ["name LIKE ?", "%" + part + "%" ],:limit => 5);
end
end

Controller中:

class FruitController < ApplicationController

skip_before_filter :verify_authenticity_token, :only => [:auto_complete_for_user_fruit] 
def index
end

def auto_complete_for_user_fruit    
begin
fruit = params[:user][:fruit]
rescue
# 如果不能正常取得请求参数,给一个默认参数
fruit = "an"
end     
@results = Fruit.find_fruit_by_part(fruit);    
render :inline => "<%= auto_complete_result @results, 'name' %>"
end

end

view中:

<h3>测试自动完成功能</h3>
<p>
<%= text_field_with_auto_complete :fruit, :name %>
</p>

案列三:添加css样式

css:

.useraddress{
font-size:12px;
color:#628B24
}

controller:
class MessageController < ApplicationController

skip_before_filter :verify_authenticity_token, :only => [:auto_complete_for_message_to]

def auto_complete_for_message_to()
user_name = params[:message][:to]
@customers = Customer.find(:all , :conditions=>"name like '%"+user_name.downcase+"%'")
render :partial => 'username'
end

end

view:

new.rhtml

auto_complete 自动提示:<br/><br>
<%= text_field_with_auto_complete 'message', 'to',{}, :skip_style => false %>

_username.rhtml

<ul class="allusers">
<% for customer in @customers do %>
<li class="thisuser">
<div class="username">
<%=h customer.name %>
</div>
<div class="useradd">
<span class="useraddress">
<%=h customer.address %>
</span>
</div>
</li>
<% end %>
</ul>

案列源码下载:

http://www.namipan.com/d/080744d037c133836019281306a7d90e1e546d8a3d970100

ref:

http://share-facts.blogspot.com/2009/02/autocompleter-example-in-ruby-on-rails.html
http://jbf034.javaeye.com/blog/215429

续:

如果想修改默认的auto_complete的css样式,到auto_complete_macros_helper.rb文件下找到auto_complete_stylesheet方法修改即可,我修改后的css

image



write by feng
posted on 2009-03-31 16:21 fl1429 阅读(1118) 评论(0)  编辑  收藏 所属分类: Rails

只有注册用户登录后才能发表评论。


网站导航:
 
已访问数:
free counters