【问题标题】:How to use valid? method on an array in rails 3如何使用有效? rails 3中数组上的方法
【发布时间】:2013-06-01 16:47:36
【问题描述】:

我正在开发 Rails 3 中的应用程序。

我有几条记录要保存到我的数据库中。我试图确保数组中的所有对象(记录存储在数组中)在保存之前都是有效的。 Owner 模型验证姓名和电子邮件是否存在。在 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?

为了确保每条记录都是有效的,然后我可以继续保存它们。

谢谢

【问题讨论】:

    标签: ruby ruby-on-rails-3 activerecord ruby-on-rails-3.2


    【解决方案1】:

    每个不返回 valid? 值的数组。您可能想要:

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

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

    例子也可以写成:

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

    @owner.all?(&:valid?)
    

    【讨论】:

    • 谢谢,这两个选项都运行良好。我必须阅读每个和收集之间的差异。
    • 没有太多要读的... >AND 将块的每次迭代的返回值收集到一个新的数组中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    相关资源
    最近更新 更多