`
orcl_zhang
  • 浏览: 244708 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

修改auto_complete插件,支持虚拟属性

阅读更多
   今天用auto_complete插件实现自动补全,但是中间遇到些问题.
   按照网上的方法在view里添加代码:
  
   <%= text_field_with_auto_complete :material, :material_number %>
   

   在controller里添加代码:
  
   auto_complete_for :material, :material_number
   

   开始跑一遍.试下,结果如何.
   页面上没有发生变化,打开log,提示如下信息
  
     Parameters: {"material"=>{"material_number"=>"cp"}}
  Material Load (0.0ms)   Mysql::Error: Unknown column 'material_number' in 'where clause': SELECT * FROM `materials` WHERE (LOWER(material_number) LIKE '%cp%') ORDER BY material_number ASC LIMIT 10
    

    因为material_number是material表里的虚拟属性,所以上面sql语句出错.
    这条sql语句应该是在auto_complete插件中实现的一个方法.
    找到auto_complete的源码
   
  module ClassMethods
    def auto_complete_for(object, method, options = {})
      define_method("auto_complete_for_#{object}_#{method}") do
        find_options = { 
          :conditions => [ "LOWER(#{method}) LIKE ?", '%' + params[object][method].downcase + '%' ], 
          :order => "#{method} ASC",
          :limit => 10 }.merge!(options)
        
        @items = object.to_s.camelize.constantize.find(:all, find_options)

        render :inline => "<%= auto_complete_result @items, '#{method}' %>"
      end
    end
  end
    

    原来如此,看来要自己要写一个方法了.cotroller里的代码
   
  #自动补全
  def auto_complete_for_material_material_number
    @items = Material.auto_complete_material_number(params[:material][:material_number],:order => 'first_number ASC',:limit => 10)
    render :inline => "<%= auto_complete_result @items, 'material_number' %>"
  end
     

     model里的代码
    
  #material_number自动补全重写
  def self.auto_complete_material_number(full_number,options = {})
    find_options = {:conditions => [ "first_number LIKE ? or last_number LIKE ?",
        '%' + full_number.downcase + '%' , '%' + full_number.downcase + '%' ]}.merge!(options)
 #   with_scope :find => options do
      Material.find(:all,find_options)
  #  end
  end
     

     关于material_number虚拟属性的读方法也贴出来,便于理解
    
      def material_number
        [self.first_number,self.last_number].join('-')
      end
     

     再试下,看有问题没,没有提示,看log
  Parameters: {"material"=>{"material_number"=>"c"}}
  Material Load (0.2ms)   SELECT * FROM `materials` WHERE (first_number LIKE '%c%' or last_number LIKE '%c%') ORDER BY first_number ASC LIMIT 10
Completed in 19ms (View: 1, DB: 0) | 200 OK [http://localhost/production/production_plans/auto_complete_for_material_material_number]

    然后在mysql中运行上述sql语句,有结果,但是为什么没有传到前台页面呢?
应该是controller中这句代码,一步一步的分析吧.
render :inline => "<%= auto_complete_result @items, 'material_number' %>"

的原因.这个auto_complete_result是什么呢?
    还是要回到源码中寻找答案.
  def auto_complete_result(entries, field, phrase = nil)
    return unless entries
    items = entries.map { |entry| content_tag("li", phrase ? highlight(entry[field], phrase) : h(entry[field])) }
    content_tag("ul", items.uniq)
  end

    猜想是不是这里"entry[field]",打开console,
>> material[:material_number]
=> nil
>> material.send(:material_number)
=> "cp-sj-nokia-2330"

   应该是这里的问题了.
   在help里增加方法
  #重写自动补全
  def auto_complete_result(entries, field, phrase = nil)
    return unless entries
    items = entries.map { |entry| content_tag("li", phrase ? highlight(entry.send(field), phrase) : h(entry.send(field))) }
    content_tag("ul", items.uniq)
  end

    再试下,好了,ok.






    
   
分享到:
评论

相关推荐

    STM32CubeIDE_Auto_Complete.zip

    "STM32CubeIDE_Auto_Complete.zip"这个压缩包很可能是为STM32CubeIDE提供代码自动补全功能的插件。在编程过程中,代码自动补全能提高开发效率,减少手动输入错误,帮助开发者快速找到和使用库函数。这个插件可能包含...

    莱斯康_LX480_Complete_v3.1.1效果器插件

    安装方面,压缩包中的"Setup LX480 Complete v3.1.1.exe"文件即为安装程序,用户只需按照提示步骤进行操作,即可将插件成功安装到支持VST、AU或AAX格式的宿主软件中,如Cubase、Logic Pro、Pro Tools等。 总的来说...

    android auto_complete_text

    标题"android auto_complete_text"表明我们将讨论的是如何自定义和优化这个控件。 `AutoCompleteTextView` 是 `EditText` 的扩展,它具有自动补全功能。当用户在文本框中输入文字时,系统会根据预设的数据源(如...

    ctags插件下载地址亲测可用

    此外,该插件还支持“跳回”功能,允许用户在查看完定义后返回到原来的位置,从而避免了在多个文件间频繁切换的麻烦。 #### 知识点三:ctags插件安装与配置 1. **下载链接**:通过提供的链接...

    auto_complete_string.rar_C 联想输入_c string

    在本项目中,我们关注的是"auto_complete_string.rar"这个压缩包,它包含了一个用C++实现的输入联想字符串匹配功能。这个功能通常用于各种用户界面,如搜索引擎、文本编辑器或命令行工具,以提高用户输入效率。 ...

    auto_complete的实现

    在编程和软件开发中,自动补全(Auto-Complete)是一项常用且重要的功能,它极大地提高了程序员的效率,减少了输入错误。本篇文章将深入探讨自动补全的实现原理,并结合源码分析,帮助读者理解其内部工作机制。 ...

    LMD_VCL_Complete_2021_for_Delphi_10.4.2

    LMD_VCL_Complete_2021_for_Delphi_10.4.2

    FMSoft_uniGUI_Complete_Professional_1.70.0.1491.rar

    首先,FMSoft_uniGUI_Complete_Professional_1.70.0.1491.exe是主程序安装包,它提供了uniGUI的完整专业版。该版本包含所有核心组件和服务,允许开发者构建基于Web和移动设备的应用程序。uniGUI支持多种服务器平台,...

    调色滤镜CEP_3.0_Complete

    调色滤镜CEP_3.0_Complete是一款专业级别的图像处理工具,它专注于为用户提供丰富多样的调色效果,以提升照片的艺术性和视觉冲击力。CEP(Creative Extension Panel)是Adobe Photoshop等创意软件中的扩展面板,允许...

    FMSoft_uniGUI_Complete_Professional_1.90.0.1551..rar

    "Complete"和"Professional"表明这个版本可能包含所有组件、模块和工具,不设任何功能限制,且可能提供专门的技术支持服务。 "uniGUI_Complete_Professional_1.90.0.1551.exe"是压缩包内的主要文件,这是一个可执行...

    FMSoft_uniGUI_Complete_Professional1496

    FMSoft_uniGUI_Complete_Professional_1.90.0.1496,完全使用版,请下载的同学务必不要做商业用途,如果喜欢请支持正版,此版本已注册,下载后直接填写相应KEY里面的东东就可以!

    应用源码之37.Spinner和Auto_Complete控件学习.zip

    总之,"应用源码之37.Spinner和Auto_Complete控件学习.zip"是一个宝贵的资源,它提供了深入了解和实践这两种控件的机会。通过研究和实践,开发者可以增强对Android UI组件的理解,提升自己的开发技能。

    FMSoft_uniGUI_Complete_runtime

    FMSoft_uniGUI_Complete_runtime_1.70.0.1485

    FMSoft_uniGUI_Complete_Professional_1.90.0.1530.rar

    UniGUI1.90.0.1530,Delphi下快速Web开发的利器。解开压缩包按照安装提示文件里面的步骤,即可简单安装成功。虽然这个版本是1530,但只要稍稍动动脑筋,实际上是可以升级到1534的。

    LMD_VCL_Complete_V10.10.02_Full_Source.7z

    《LMD_VCL_Complete_V10.10.02_Full_Source.7z: Delphi 开发者的宝藏库》 在编程的世界里,工具和库是开发者的重要武器,尤其是对于 Delphi 开发者来说,优秀的组件库能极大地提高开发效率和软件质量。本文将详细...

    FMSoft_uniGUI_Complete_Professional_1.0.0.1383_RC

    FMSoft_uniGUI_Complete_Professional_1.0.0.1383_RC

    FMSoft_uniGUI_Complete_Professional_1.70.0.1489

    - **扩展性**:uniGUI可能支持插件系统或自定义模块,允许开发者根据需求扩展其功能。 总结来说,FMSoft_uniGUI Complete Professional 1.70.0.1489 提供了一个全面的GUI开发解决方案,包括开发工具、运行时支持、...

    FMSoft_uniGUI_Complete_runtime_1.70.0.1486.exe

    FMSoft_uniGUI_Complete_runtime_1.70.0.1486.exe

    FMSoft_uniGUI_Complete_Professional_1.70.0.1492

    综上所述,FMSoft_uniGUI Complete Professional 1.70.0.1492 提供了一整套工具,从开发、文档、运行时到主题定制和服务器配置,为开发者提供了全面的支持,以构建高效、美观且跨平台的Web应用程序。通过这个版本,...

    凝霜扩展版code_complete.vim

    扩展后的code_complete.vim插件,见http://blog.csdn.net/MDL13412博客相关文章。

Global site tag (gtag.js) - Google Analytics