【问题标题】:How to return a true/false statement off of a select conditional in rails如何从rails中的选择条件中返回真/假语句
【发布时间】:2010-07-20 02:52:24
【问题描述】:

我正在尝试选择一个数组,并检查数组中的任何对象是否为假。如果其中任何一个为 false,我希望返回 false 的最终值。

如果全部为真,我希望返回真..

这就是我所拥有的......

validates_presence_of :email, :if => Proc.new { |user| user.organizations.find(:all).select {|org| org.contact_24} }

不幸的是,这只是返回数组。

你会怎么做?

【问题讨论】:

    标签: ruby-on-rails validation conditional


    【解决方案1】:

    使用exists? 方法在数据库中执行检查。这样可以确保所有计算都在数据库中完成,而不是在客户端代码中完成。

    validates_presence_of :email, 
           :unless => Proc.new { organizations.exists?(:contact_24 => false)}
    

    如果您仍然坚持在客户端执行此操作,那么:

    validates_presence_of :email, 
           :unless => Proc.new { organizations.any?{|o| o.contact_24 != true}}
    

    【讨论】:

      【解决方案2】:

      好的,所以你的过程:

      org.contact_24
      

      Select 只会返回一个数组...所以如果所有 org.contact_24 都为 true,则需要返回 true。

      validates_presence_of :email, :if => Proc.new { |user| user.organizations.find(:all).collect {|org| org unless org.contact_24}.compact.blank? }
      

      这将构建一个包含为 false 的 contact_24 的组织数组。然后它压缩数组,如果为空则返回 true。

      所以,如果任何记录不真实,那就是错误的。

      我建议移动 organizations.find(:all).collect {|org| org 除非 org.contact_24}.compact.blank?进入一个范围,所以你最终会得到:

      user.organizations.not_contacted_in_24_hours
      

      【讨论】:

        【解决方案3】:

        哇,让一个简单的任务复杂化了。怎么样

        def some_func(arr)
          !arr.include?(false)
        end
        

        也许我遗漏了一些东西......但问题只是询问如何返回“false”是一个包含“false”的数组,这就是它的作用。

        【讨论】:

        • 如何在我的 Proc.new 中实现它?
        猜你喜欢
        • 2011-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        相关资源
        最近更新 更多