4

Rails 3でアプリを作成しています。

データベースに保存したいレコードがいくつかあります。保存する前に、配列内のすべてのオブジェクト (レコードは配列に格納されています) が有効であることを確認しようとしています。所有者モデルは、名前と電子メールの存在を検証します。Rails コンソールで、次のことを試しました。

@owner = Array.new
=> []

@owner[0] = Owner.new (name:"peter", email:"peter@gmail.com")
=> returns object

@owner[1] = Owner.new (name:"fred", email:"fred@gmail.com")
=> returns object

@owner[2] = Owner.new (name:"", email:"")
=> returns object

@owner[0].valid?
=> true

@owner[1].valid?
=> true

@owner[2].valid?
=> false

@owner.each { |t| t.valid? }
=> returns an array like this: [object1, object2, object3]. I would expect something like this instead: [true,true,false]

.valid? の理由がわかりません。メソッドは、@owner[i] を使用して配列の要素を個別にチェックすると正常に動作しますが、.each を使用して配列を反復処理している場合は正しく動作しません。何が問題なのか知っている人はいますか?

私がやろうとしていることは、次のようなことを達成することです:

(@owner.each { |t| t.valid? }).all?

各レコードが有効であることを確認してから、保存に進みます。

ありがとう

4

1 に答える 1

10

それぞれは値の配列を返しませんvalid?。おそらく次のいずれかが必要です。

(@owner.collect { |t| t.valid? }).all?

また

(@owner.all? { |t| t.valid? })

例は次のように書くこともできます。

@owner.collect(&:valid?).all?

また

@owner.all?(&:valid?)
于 2013-06-05T20:35:06.333 に答える