2011-09-16 30 views
1

我剛開始熟悉範圍,我發現它們可以使用字符串或散列符號來編寫。使用範圍時,應該何時使用散列符號與字符串?

從軌道文檔實例:

scope :dry_clean_only, joins(:washing_instructions).where('washing_instructions.dry_clean_only = ?', true) 

這也可以寫成:

scope :dry_clean_only, joins(:washing_instructions).where(:washing_instructions => { :dry_clean_only => true }) 
  • 你如何選擇使用哪一個?
  • 是否會影響性能 ?
  • 有沒有「導軌方式」? (文檔種撒 用法)

謝謝!

回答

0

我個人嘗試儘可能使用哈希語法,並在不可避免時使用字符串。

scope :plus_size, where(:plus_size => true) 

scope :similar_name, lambda{ |name| where('name LIKE ?', "%#{name}%") } 

我擔心寫我的SQL錯誤,所以它不太我上面寫越好(如本例中,不逃避額外%的串)。

0

至於選擇哪一個,這確實是一個偏好問題。我個人更喜歡哈希語法,因爲您可以掃描它並輕鬆查看哪些參數用於哪些列。哈希語法僅適用於相等查詢,因此無論如何,您都需要使用字符串格式進行更復雜的查詢。

我敢打賭,性能差異可以忽略不計,因爲它被轉換爲SQL查詢。觸及數據庫並處理結果將會發生在大部分處理時間的地方,並且在兩種情況下都是相同的。

如果您想對它們進行基準測試,可以使用rails基準測試。

rails benchmarker "Model.joins(:washing_instructions).where('washing_instructions.dry_clean_only = ?', true)" "Model.joins(:washing_instructions).where(:washing_instructions => { :dry_clean_only => true })" 
相關問題