1

我刚刚成功集成了 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
        });
    });
});
4

0 回答 0