문제

저는 Ruby on Rails와 함께 일하고 있으며 두 가지 모델을 검증하고 싶습니다.

if (model1.valid? && model2.valid?)
...
end

그러나 "&&"연산자는 단락 평가를 사용합니다 (즉, "model1.valid?"만 참을 때만 "model2.valid?"를 평가합니다. 모델 1이 유효하지 않은 경우 model2.valids가 실행되는 것을 방지합니다.

단락 평가를 사용하지 않는 "&&"와 동등한 것이 있습니까? 두 가지 표현이 평가되어야합니다.

도움이 되었습니까?

해결책

이 시도:

([model1, model2].map(&:valid?)).all?

둘 다 유효 한 경우 True가 반환되고 두 인스턴스 모두에 오류가 발생합니다.

다른 팁

& 잘 작동합니다.

irb(main):007:0> def a
irb(main):008:1> puts "a"
irb(main):009:1> false
irb(main):010:1> end
=> nil

irb(main):011:0> def b
irb(main):012:1> puts "b"
irb(main):013:1> true
irb(main):014:1> end
=> nil

irb(main):015:0> a && b
a
=> false

irb(main):016:0> a & b
a
b
=> false

irb(main):017:0> a and b
a
=> false

어때요 :

if [model1.valid?,model2.valid?].all?
  ...
end

나를 위해 일합니다.

별도로 평가하고 결과를 변수로 저장하십시오. 그런 다음 부울 사이에 간단한 &&를 사용하십시오 :)

지도로 추가 배열을 만드는 대신 블록을 전달할 수 있습니다. all?.

[model_instance_1, model_instance_2].all? {|i| i.valid? }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top