2012-08-09 34 views
1

我試圖更新一些最小和最大的字段,所以這是一個留空,然後從另一個值複製的值。到目前爲止,我有:Ruby On Rails update_all測試條件不相等

Item.update_all({:min = :max}, {:min => nil, :max !=> nil})

因爲這兩個領域可能是nil我不管他們是但!=>是不正確的。我將如何去測試不等於使用這種風格的條件?

回答

4

這不是哈希的有效ruby語法。

嘗試:

Item.update_all("min = max", "min IS NULL AND max IS NOT NULL") 

或者:

Item.where("min IS NULL AND max IS NOT NULL").update_all("min = max") 
+0

有什麼優勢或者這些還是他們產生相同的SQL? – DrYap 2012-08-09 11:57:28

+1

他們產生完全相同的查詢。我的個人偏好是第二種選擇,因爲它更具可讀性並允許使用範圍。例如'scope has_only_max,lambda {where(「min IS NULL and max IS NOT NULL」)}' 然後您可以這樣做:'Item.has_only_max.update_all(「min = max」) – 2012-08-09 12:03:28