#102 Auto-Complete Association

本文介绍了一种使用文本字段实现自动完成功能的方法,通常选择菜单用于设置属于关联,但这里展示了如何通过文本字段和自动完成脚本来实现类似的功能。这种方法提高了用户体验,并允许用户更快地输入相关类别。
Usually a select menu is used for setting a belongs_to association, but in this episode I will show you how to use a text field with auto completion.
script/plugin install auto_complete

# product.rb
def category_name
category.name if category
end

def category_name=(name)
self.category = Category.find_or_create_by_name(name) unless name.blank?
end

# categories_controller.rb
def index
@categories = Category.find(:all, :conditions => ['name LIKE ?', "%#{params[:search]}%"])
end

<!-- products/_form.html.erb -->
<p>
<%= f.label :category_name %>
<%= text_field_with_auto_complete :product, :category_name, { :size => 15 }, { :url => formatted_categories_path(:js), :method => :get, :param_name => 'search' } %>
</p>

<!-- categories/index.js.erb -->
<%= auto_complete_result @categories, :name %>
SQL具体创建如下,请告诉我怎么完成实验 /* MySQL Data Transfer Source Host: localhost Source Database: books Target Host: localhost Target Database: books Date: 2013-10-26 6:32:01 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for account -- ---------------------------- DROP TABLE IF EXISTS `account`; CREATE TABLE `account` ( `id` int(11) NOT NULL auto_increment, `balance` double default NULL, `creditcard` varchar(20) default NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for authorisbn -- ---------------------------- DROP TABLE IF EXISTS `authorisbn`; CREATE TABLE `authorisbn` ( `authorID` int(11) default NULL, `isbn` varchar(20) default NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for authors -- ---------------------------- DROP TABLE IF EXISTS `authors`; CREATE TABLE `authors` ( `authorID` int(11) NOT NULL auto_increment, `firstName` varchar(20) default NULL, `lastName` varchar(30) default NULL, PRIMARY KEY (`authorID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for bookorder -- ---------------------------- DROP TABLE IF EXISTS `bookorder`; CREATE TABLE `bookorder` ( `orderId` int(11) NOT NULL auto_increment, `username` varchar(20) default NULL, `zipcode` varchar(8) default NULL, `phone` varchar(20) default NULL, `creditcard` varchar(20) default NULL, `total` double default NULL, PRIMARY KEY (`orderId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for publishers -- ---------------------------- DROP TABLE IF EXISTS `publishers`; CREATE TABLE `publishers` ( `publisherID` int(11) NOT NULL auto_increment, `publisherName` varchar(30) default NULL, PRIMARY KEY (`publisherID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for titles -- ---------------------------- DROP TABLE IF EXISTS `titles`; CREATE TABLE `titles` ( `isbn` varchar(20) character set utf8 collate utf8_bin NOT NULL, `title` varchar(100) default NULL, `editionNumber` int(11) default NULL, `copyright` varchar(4) default NULL, `publisherID` int(11) default NULL, `imageFile` varchar(100) default NULL, `price` double default NULL, `summary` varchar(200) default NULL, PRIMARY KEY (`isbn`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Table structure for userinfo -- ---------------------------- DROP TABLE IF EXISTS `userinfo`; CREATE TABLE `userinfo` ( `userId` int(11) NOT NULL auto_increment, `loginname` varchar(20) default NULL, `password` varchar(10) default NULL, PRIMARY KEY (`userId`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- ---------------------------- -- Records -- ---------------------------- INSERT INTO `account` VALUES (&#39;1&#39;, &#39;7500&#39;, &#39;12345678901&#39;); INSERT INTO `account` VALUES (&#39;3&#39;, &#39;20000&#39;, &#39;001&#39;); INSERT INTO `account` VALUES (&#39;4&#39;, &#39;20000&#39;, &#39;001&#39;); INSERT INTO `account` VALUES (&#39;5&#39;, &#39;20000&#39;, &#39;001&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130895725&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0132261197&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130895717&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0135289106&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0139163050&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;013028419x&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130161438&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130856118&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130125075&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0138993947&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130852473&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130829277&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0134569555&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130829293&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130284173&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130284181&#39;); INSERT INTO `authorisbn` VALUES (&#39;1&#39;, &#39;0130895601&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130895725&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0132261197&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130895717&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0135289106&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0139163050&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;013028419x&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130161438&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130856118&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130125075&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0138993947&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130852473&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130829277&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0134569555&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130829293&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130284173&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130284181&#39;); INSERT INTO `authorisbn` VALUES (&#39;2&#39;, &#39;0130895601&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;013028419x&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;0130161438&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;0130856118&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;0134569555&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;0130829293&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;0130284173&#39;); INSERT INTO `authorisbn` VALUES (&#39;3&#39;, &#39;0130284181&#39;); INSERT INTO `authorisbn` VALUES (&#39;4&#39;, &#39;0130895601&#39;); INSERT INTO `authors` VALUES (&#39;1&#39;, &#39;Harvey&#39;, &#39;Deitel&#39;); INSERT INTO `authors` VALUES (&#39;2&#39;, &#39;Paul&#39;, &#39;Deitel&#39;); INSERT INTO `authors` VALUES (&#39;3&#39;, &#39;Tem&#39;, &#39;Nieto&#39;); INSERT INTO `authors` VALUES (&#39;4&#39;, &#39;Sean&#39;, &#39;Santry&#39;); INSERT INTO `bookorder` VALUES (&#39;1&#39;, &#39;admin&#39;, &#39;226007&#39;, &#39;8888866666&#39;, &#39;12345678901&#39;, &#39;50&#39;); INSERT INTO `bookorder` VALUES (&#39;2&#39;, &#39;admin&#39;, &#39;226007&#39;, &#39;8888866666&#39;, &#39;12345678901&#39;, &#39;118.5&#39;); INSERT INTO `bookorder` VALUES (&#39;3&#39;, &#39;admin&#39;, &#39;226007&#39;, &#39;88886666&#39;, &#39;12345678901&#39;, &#39;100&#39;); INSERT INTO `bookorder` VALUES (&#39;7&#39;, &#39;admin&#39;, &#39;226007&#39;, &#39;12345678&#39;, &#39;12345678901&#39;, &#39;390&#39;); INSERT INTO `bookorder` VALUES (&#39;8&#39;, &#39;ww&#39;, &#39;222&#39;, &#39;333&#39;, &#39;4444444&#39;, &#39;86&#39;); INSERT INTO `bookorder` VALUES (&#39;9&#39;, &#39;ee&#39;, &#39;ee&#39;, &#39;ee&#39;, &#39;ee&#39;, &#39;88.4000015258789&#39;); INSERT INTO `publishers` VALUES (&#39;1&#39;, &#39;Prentice Hall&#39;); INSERT INTO `publishers` VALUES (&#39;2&#39;, &#39;Prentice Hall PTG&#39;); INSERT INTO `titles` VALUES (&#39;9787121072984&#39;, &#39;Java Web整合开发与项目实战&#39;, &#39;1&#39;, &#39;2009&#39;, &#39;1&#39;, &#39;perlhtp1.jpg&#39;, &#39;49&#39;, null); INSERT INTO `titles` VALUES (&#39;9787121072985&#39;, &#39;Flex 3 RIA开发详解与精深实践&#39;, &#39;1&#39;, &#39;2009&#39;, &#39;1&#39;, &#39;ebechtp1.jpg&#39;, &#39;44&#39;, null); INSERT INTO `titles` VALUES (&#39;9787121072986&#39;, &#39;精通EJB3.0&#39;, &#39;2&#39;, &#39;2006&#39;, &#39;2&#39;, &#39;javactc2.jpg&#39;, &#39;64&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811010101&#39;, &#39;JavaEE编程技术&#39;, &#39;1&#39;, &#39;2002&#39;, &#39;2&#39;, &#39;vbctc1.jpg&#39;, &#39;38&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811010102&#39;, &#39;C++ 程序设计&#39;, &#39;2&#39;, &#39;1998&#39;, &#39;1&#39;, &#39;cpphtp2.jpg&#39;, &#39;50&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811010103&#39;, &#39;Java How to Program&#39;, &#39;2&#39;, &#39;1998&#39;, &#39;1&#39;, &#39;jhtp2.jpg&#39;, &#39;50&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811010121&#39;, &#39;The Complete C++ Training Course&#39;, &#39;3&#39;, &#39;2001&#39;, &#39;2&#39;, &#39;cppctc3.jpg&#39;, &#39;54&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811014322&#39;, &#39;Web编程技术&#39;, &#39;1&#39;, &#39;2008&#39;, &#39;1&#39;, &#39;xmlhtp1.jpg&#39;, &#39;36&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811019877&#39;, &#39;EJB JPA数据库持久层开发&#39;, &#39;3&#39;, &#39;2008&#39;, &#39;2&#39;, &#39;javactc3.jpg&#39;, &#39;49&#39;, null); INSERT INTO `titles` VALUES (&#39;9787811078661&#39;, &#39;精通JavaEE项目案例&#39;, &#39;1&#39;, &#39;2007&#39;, &#39;1&#39;, &#39;iw3htp1.jpg&#39;, &#39;70&#39;, null); INSERT INTO `userinfo` VALUES (&#39;1&#39;, &#39;admin&#39;, &#39;123&#39;);
11-07
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值