2016-05-09 64 views
0

我正在重寫查詢以提高可讀性。原來,這一切都是在同一行:Rails ActiveRecord查詢語法問題 - 不返回任何記錄

@properties = Listing.where(website_approved__c: 'true').where(status__c: 'Active').where("sales_price__c >= ?", @pricemin).where("sales_price__c <= ?", @pricemax).where(bedrooms__c: @beds).where(baths__c: @baths).where("lower(city__c) LIKE (?)", "%" + @city.downcase + "%").where("zip_code__c LIKE (?)", "%" + @zip + "%").page(params[:page]).per(4) 

我想多行拆分這一點,我也跟着上分裂Ruby代碼分成多行過去StackOverflow的答案:Ruby code beautification, split long instructions on multiple lines

這是我寫的:

@properties = Listing.where(website_approved__c: 'true', status__c: 'Active', bedrooms__c: @beds, baths__c: @baths). 
    where([ "sales_price__c >= ? AND sales_price__c <= ?", @pricemin, @pricemax]). 
    where(["lower(city__c) LIKE (?) AND zip_code__c LIKE (?)", "%"[email protected]+"%", "%"[email protected]+"%"]). 
    page(params[:page]).per(4) 

但是,新的查詢將永遠不會返回任何內容。我保持WHERE子句相同,這就是爲什麼我想知道這是否是一個語法問題。任何人都可以點亮一下嗎?

我目前正在運行Rails v4.2.1。

+1

如果追加'.to_sql'到的每個版本這個查詢,你看到了什麼?查詢如何不同? –

+0

第二個查詢還包含'where'條件:'listing_agent__c:@ userId',它不存在於第一個查詢中... – BoraMa

+0

同樣對於一般的美化,有幾個很好的理由可以限制每行80個字符。這不僅僅是代碼的外觀 - 這種紀律是一位好老師。它會照亮你的代碼太複雜,嵌套過深的地方,等等。 –

回答

0

好像你已經解決了你的問題。

既然你的目的爲提高可讀性,我想目前我怎麼會結構查詢(如果我沒有被允許使用範圍):

@properties = Listing.where(
    baths__c:   @baths, 
    bedrooms__c:   @beds, 
    sales_price__c:  (@[email protected]), 
    status__c:   'Active', 
    website_approved__c: 'true' 
).where(
    'lower(city__c) LIKE :city AND zip_code__c LIKE :zip', 
    city: "%#{@city.downcase}%", 
    zip: "%#{@zip}%" 
).page(params[:page]).per(4)