簡體   English   中英

如何在Rails中加入命名范圍

[英]how to join named scopes in rails

我想在使用數組生成它們時加入我的命名作用域。 我該怎么辦,我不能加入命名范圍,是否有更好的方法呢?

 scope :search, ->(attrs_for_search,params) do
   if attrs_for_search.present?
     params_to_search_on = params.keys & attrs_for_search
     params_to_search_on.collect{|x| where("#{x} ILIKE ?", "%#{params[x]}%")     }
   else                 
     none               
   end                  
 end   

 Contact.search(%w[email],{'email => 'jason'})  

返回數組時,無法鏈接作用域。

您可以:

  1. 嘗試返回一個關系:

     results = params_to_search_on.collect{|x| where("#{x} ILIKE ?", "%#{params[x]}%") } where(id: results.flatten.map(&:id)) 

    我尚未對此進行測試,但我認為您將需要flatten因為結果是一系列關系[rel_1,_rel_2]

    然后,您可以使用/鏈接/附加這樣的范圍:

     Contact.search(attrs, params).other_scope.another_scope(with_params) 
  2. 您可能想閱讀全文搜索,以擴展該主題,我需要了解您正在使用的數據庫。

我認為您可以創建一個范圍並使用“發送”方法來加入這些范圍。

scope :search, ->(field, value) do
   where("#{field} LIKE ?", "%#{value}%")
end

def self.multi_search(params)
    result = nil
    params_to_search_on = params.keys
    params_to_search_on.each do |k|
      if result.nil?
        result = Message.send(:search, k, params[k])
      else
        result = result.send(:search, k, params[k])
      end
    end
    result
end

希望這對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM