代码之家  ›  专栏  ›  技术社区  ›  sscirrus

使用will-paginate/searchlogic搜索多个字段

  •  2
  • sscirrus  · 技术社区  · 14 年前

    如何有效地在模型中的多个字段中搜索?

    # user.rb model
    def self.search(search, page)  
      paginate :per_page => 20, :page => page,
      :conditions => 
        ['name like ? OR notes like ? OR code like ? OR city like ? OR state like ?,
        "%#{search}%","%#{search}%","%#{search}%","%#{search}%","%#{search}%"
        ], :order => 'name'
    

    这段代码对于任何多于几个字段都是可怕的,并且如果例如word#1来自:name,word#2来自:code,它不会返回结果。有更优雅的方式吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   shingara    14 年前

    我觉得那很管用

    def self.search(search, page)
      fields = [:name, :notes, :code, :city, :state] 
      paginate :per_page => 20, :page => page,
      :conditions => [fields.map{|f| "#{f} like ?"}.join(' OR '),
        *fields.map{|f| "%#{search}%"}], :order => 'name'
    
        2
  •  1
  •   akjoshi HCP    12 年前

    searchlogic

    def self.search(search, page)  
      search_cond = resource.search(name_or_notes_or_code_or_city_or_state_like => search.to_s)
      search_cond.all
    end
    

    希望你有这个想法

        3
  •  0
  •   Tadas T    14 年前
    def self.search(search, page)
      fields = %w(name notes code city state) 
      paginate :per_page => 20, :page => page,
      :conditions => [fields.map{|f| "#{f} like :phrase"}.join(' OR '), {:phrase => search}], 
      :order => 'name'