내 모델 (경매)에 두 가지 속성 (시간 및 일)이 있습니다. 시간과 업무의 결합으로 비즈니스 논리를가집니다. 내가 시간과 일 양쪽 모두 0이 될 수 없도록, 검증에 내 비즈니스 로직을 통합하려는은 속성 조합의 유효성을 확인합니다.
class Auction < ActiveRecord::Base
validates :days,:presence => true, :numericality => { :greater_than_or_equal_to => 0, :only_integer => true }
validates :hours,:presence => true, :numericality => { :greater_than_or_equal_to => 0, :only_integer => true }
예를
auction duration = days*24 + hours
를 들어 나는 또한 시간과 일에 대한 몇 가지 기본적인 검증 있습니다. ActiveRecord 유효성 검사를 사용하여이를 수행 할 수있는 방법이 있습니까? AR 유효성 검사를 수행하는 다른 방법이 있다는 것을 알고 있습니다. 지금은 모델의 새로운 인스턴스를 만들고 있습니다. 위와 같이 일과 시간을 확인하십시오. 그렇다면 "수동으로"검증을 수행하고 통과하지 못하면 인스턴스를 제거하는 모델 메소드가 있습니다. 이것이 최선의 방법이 아니라는 것을 알고 있습니다.
def compute_end_time
# assumes that days and hours are already valid
time = self.days*24 + self.hours
if time > 1
self.end_time = time.hours.from_now.utc
self.save
else
# Auction duration too short (i.e. zero)
self.delete
end
end
일 및 시간의 존재는 유효하지 않습니까? 나는 그것이되어야한다고 생각한다 : if! (days = 0 && hours = 0) – tir38
이것은 작동 할 것이다. 시도 해봐. 나는이 조건이 사실로 평가되기 위해서는 일과 시간이 모두 0이어야한다고 생각합니다. 내가 사용했던 대부분의 언어에서, 변수가 0이면 거짓으로 평가됩니다. 또한 변수가 0이 아닌 경우 true로 평가됩니다. 하지만 ...이 언어에 대해서는 잘 모르겠습니다. – rharrison33
레일스가 반드시 이러한 vaildation을 순서대로 수행하지는 않습니까? 그것은 일의 유효성을 검사하거나 시간을 확인하기 전에 days_and_hours의 유효성을 검사 할 수 있습니까? – tir38