2012-08-09 2 views
1

최소 및 최대 필드를 업데이트하려고합니다. 하나는 비어있는 상태로두고 다른 하나는 값을 복사합니다. 지금까지 내가 가진 : 두 필드 이후Ruby On Rails update_all 테스트 조건이 동일하지 않습니다.

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

는 그들이하지만 !=>가 정확하지 여부를 내가 가진 nil 수 있습니다. 이런 상태의 스타일을 사용하는 것과 동등하지 않은 것에 대한 테스트는 어떻게해야합니까?

답변

4

이것은 해시에 대한 유효한 루비 구문이 아닙니다.

시도 :

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

+1

정확히 동일한 쿼리를 생성합니다. 내 개인적인 선호도는 더 읽기 쉽고 범위를 사용할 수 있으므로 두 번째 옵션입니다. 예를 들어'scope has_only_max, lambda {where ("최소 IS NULL과 최대 IS NOT NULL")}'' 다음과 같이 할 수 있습니다 :'Item.has_only_max.update_all ("min = max") –