我刚刚成功集成了 jquery 的自动完成功能,以便在您为不同的表以几种不同的形式输入多个文本字段时,从我的 rails 3 应用程序中的 mysql 数据库返回和过滤结果。
它非常有效,但绝对是一种低效的代码设置。我花了一些时间尝试以正确的方式编写它,但我就是无法正确地写出来;远远超出我目前的技能水平。
我想我会在这里为那些仍在寻找的新手发布解决方案(因为即使这对我来说有点困难),看看是否有人可以通过一些技巧来推荐/指导我们以正确简化它?
(这也是我的第一个 SO 贡献;我终于觉得我有一些有价值的东西,所以请原谅任何新手错误)
在我的宝石文件中;
group :assets do
gem 'jquery-ui-rails'
end
gem 'jquery-rails'
然后确保已安装所有 gem。
在我的 application.css 文件中,该文件包含在必要的视图中;
*= require jquery.ui.all
在一种形式的关联控制器文件中;
# GET /auto_custom_method1.json
def auto_custom_method1
render :json => Model.where("database_column_name1 LIKE ?", "%#{params[:term]}%").map(&:database_column_name1).uniq
end
# GET /auto_custom_method2.json
def auto_custom_method2
render :json => Model.where("database_column_name2 LIKE ?", "%#{params[:term]}%").map(&:database_column_name2).uniq
end
# GET /auto_custom_method3.json
def auto_custom_method3
render :json => Model.where("database_column_name3 LIKE ?", "%#{params[:term]}%").map(&:database_column_name3).uniq
end
# GET /auto_custom_method4.json
def auto_custom_method4
render :json => Model.where("database_column_name4 LIKE ?", "%#{params[:term]}%").map(&:database_column_name4).uniq
end
# GET /auto_custom_method5.json
def auto_custom_method5
render :json => Model.where("database_column_name5 LIKE ?", "%#{params[:term]}%").map(&:database_column_name5).uniq
end
在关联的控制器文件中为另一种形式;
# GET /auto_custom_method6.json
def auto_custom_method6
render :json => Model.where("database_column_name5 LIKE ?", "%#{params[:term]}%").map(&:database_column_name6).uniq
end
# GET /auto_custom_method7.json
def auto_custom_method7
render :json => Model.where("database_column_name5 LIKE ?", "%#{params[:term]}%").map(&:database_column_name7).uniq
end
# GET /auto_custom_method8.json
def auto_custom_method8
render :json => Model.where("database_column_name5 LIKE ?", "%#{params[:term]}%").map(&:database_column_name8).uniq
end
在我的 application.js 文件中,该文件包含在必要的视图中;
model_name、auto_custom_method 和 #field_id 都是根据您的独特应用程序定制的。
//= require query
//= require jquery_ujs
//= require jquery.ui.all
$(function() {
$.getJSON("/model_name1/auto_custom_method1", function(data) {
$("#field_id1").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name1/auto_custom_method2", function(data) {
$("#field_id2").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name1/auto_custom_method3", function(data) {
$("#field_id3").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name1/auto_custom_method4", function(data) {
$("#field_id4").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name1/auto_custom_method5", function(data) {
$("#field_id5").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name2/auto_custom_method6", function(data) {
$("#field_id6").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name2/auto_custom_method7", function(data) {
$("#field_id7").autocomplete({
source: data,
minLength: 1
});
});
});
$(function() {
$.getJSON("/model_name2/auto_custom_method8", function(data) {
$("#field_id8").autocomplete({
source: data,
minLength: 1
});
});
});