30

私は Ruby on Rails を使用しており、2 つの異なるモデルを検証したいと考えています。

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

ただし、"&&" 演算子は短絡評価 (つまり、"model1.valid?" が true の場合にのみ "model2.valid?" を評価する) を使用し、model1 が有効でない場合に model2.valids が実行されるのを防ぎます。

短絡評価を使用しない「&&」に相当するものはありますか? 2 つの式を評価する必要があります。

4

6 に答える 6

26

これを試して:

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

両方が有効な場合は true を返し、両方のインスタンスでエラーを作成します。

于 2009-01-28T10:10:36.707 に答える
24

&うまく動作します。

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
于 2009-01-28T11:09:03.983 に答える
4

どうですか:

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

私のために働きます。

于 2010-06-02T22:44:06.963 に答える
2

それらを個別に評価し、結果を変数に格納します。次に、それらのブール値の間に単純な && を使用します:)

于 2009-01-28T10:01:51.637 に答える
-1

map で追加の配列を作成する代わりに、ブロックを に渡すことができますall?

[model_instance_1, model_instance_2].all? {|i| i.valid? }
于 2009-01-28T10:50:36.140 に答える