2016-09-07 59 views
0

我有這樣的代碼,所以我試圖做的是,如果我輸入名字或搜索姓氏它會導致任何第一或最後紅寶石operationin在其中方法

def self.search_by(search_term) 
      where(["LOWER(first_name) LIKE :search_term", 
        {search_term: "%#{search_term.downcase}%" } ] 
       ) || where(["LOWER(last_name) LIKE :search_term", 
        {search_term: "%#{search_term.downcase}%" } ] 
    end 


<%= form_for "", url: members_path, class: "navbar-form navbar-left", role: "search", method: :get do %> 
      <div id="tfheader"> 
       <%= text_field_tag :search, @search_term ,id: "search",class: "tftextinput", size: "21", maxlength: "120" %> 
       <input type="submit" value="Search" class="tfbutton"> 
       <div class="tfclear"></div> 
      </div> 
      <% end %> 

恩:

  • LAST_NAMEFIRST_NAME您好:
  • 約翰Smeth
  • 薩爾瑪·海耶克

如果我輸入文本區域約翰它會給我整行或如果我鍵入hayek它也給我整行

回答

0

邏輯分離應該在查詢中完成,即在數據庫級別,不是紅寶石之一:

def self.search_by(search_term) 
    where(
    "LOWER(first_name) LIKE :search_term OR LOWER(last_name) LIKE :search_term", 
    search_term: "%#{search_term.downcase}%" 
) 
end 
0

試試這個:

高清self.search_by(SEARCH_TERM)

where("first_name LIKE ? OR last_name LIKE ? ", "%#{params[:search_term]}%", "%#{params[:search_term]}%")