2017-03-21 22 views
1

使用Rails 4和MySQL。我有以下內容:Rails中的SQL查詢取決於是否存在參數

if params[:a].present? && params[:b].present? && params[:c].present? 
    Shop.where("a = ? AND b = ? AND c = ?", params[:a], params[:b], params[:c]) 
elsif params[:a].present? && params[:b].present? 
    Shop.where("a = ? AND b = ?", params[:a], params[:b]) 
elsif params[:a].present? 
    Shop.where("a = ?", params[:a]) 
else 
    Shop.where("z = ?"), params[:z]) 
end 

寫這是根本不理想,因爲它很醜。有更好的方法嗎?

回答

0

控制器代碼:

if params[:a].present?|| params[:b].present? || params[:c].present? 
    Shop.custom_search(request.POST) 
else 
    Shop.where("z = ?", params[:z]) 
end 

型號代碼:

def self.custom_search(params_hash) 
    where(params_hash.slice("a", "b", "c")) 
    end 

我假設,如果PARAMS ac都存在,你想回到ac。你實際上做的是通過request.POST獲取POST變量,如果有任何參數存在,然後將其放入模型代碼中的自定義搜索算法中。

從那裏你將要切片的參數散列,把鍵作爲你希望得到的特定鍵值對的參數。

如果你不想特別不想params[:a]params[:c]在所有返回任何東西,你可以只包裹其中,在unless聲明,與key?方法上params哈希表是否有這兩個鍵或不檢查。

unless params_hash.key?("a") && params_hash.key?("c") 
    where(params_hash.slice("a", "b", "c")) 
end 
相關問題