我正在使用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?
为了确保每条记录都有效,我可以继续保存它们.
谢谢
解决方法
每个都不返回有效数组?值.您可能想要:
(@owner.collect { |t| t.valid? }).all?
要么
(@owner.all? { |t| t.valid? })
这些例子也可以写成:
@owner.collect(&:valid?).all?
要么
@owner.all?(&:valid?)