【问题标题】: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”的数组,这就是它的作用。