[英]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'})
返回數組時,無法鏈接作用域。
您可以:
嘗試返回一個關系:
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)
您可能想閱讀全文搜索,以擴展該主題,我需要了解您正在使用的數據庫。
我認為您可以創建一個范圍並使用“發送”方法來加入這些范圍。
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.