2016-02-01 115 views
2

我有以下幾點。如何以最佳方式重構它:Refactor Rails ActiveRecord根據條件

def self.search(search, organization_id, is_admin) 
    if is_admin == false 
     where("record_no LIKE ?", "%#{search}%"). 
     where("organization_id = ?", organization_id) 
    else 
     where("record_no LIKE ?", "%#{search}%") 
    end 
    end 

基本上這意味着,我想讓它顯示沒有organization_id所有記錄時,用戶是管理員。

回答

2

你可以試試這種方式。

search_criteria = where("record_no LIKE ?", "%#{search}%") 
search_criteria.where("organization_id = ?", organization_id) unless is_admin 
0

讓合併的條件where

def self.search(search, organization_id, is_admin) 
    where("record_no LIKE ? AND (? OR organization_id = ?)", "%#{search}%", is_admin, organization_id) 
end 
0

試試這個:

if !is_admin 
    where(["record_no LIKE ? and organization_id = ?", "%#{search}%", organization_id]) 
else 
    where("record_no LIKE ?", "%#{search}%") 
end 
1

它可以是這樣的:

def self.search(search, organization_id, is_admin) 
    criteria = where("record_no LIKE ?", "%#{search}%") 
    criteria = criteria.where("organization_id = ?", organization_id) unless is_admin 
    criteria 
end