Как вернуть утверждение true / false из условия select в rails - PullRequest
0 голосов
/ 19 июля 2010

Я пытаюсь выбрать массив и проверить, не является ли какой-либо из объектов в массиве ложным Если какое-либо из них имеет значение false, я хочу получить окончательное значение false.

Если все они верны, я хочу вернуть истину ..

Вот что у меня есть ...

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

Это, к сожалению, просто возвращает массив.

Как бы вы это сделали?

Ответы [ 3 ]

1 голос
/ 19 июля 2010

Выполните проверку в БД, используя метод 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}}
1 голос
/ 19 июля 2010

ОК, так что ваш процесс:

org.contact_24

Select просто вернет массив ... Так что вам нужно вернуть true, если все org.contact_24 верны.

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

Это создаст массив организаций, которые имеют contact_24, которые являются ложными. Затем он сжимает массив и возвращает true, если он пуст.

Итак, будет неверно, если какие-либо записи не соответствуют действительности.

Я бы рекомендовал переместить организации.find (: все) .collect {| org | org разве что org.contact_24} .compact.blank? в область видимости, так что вы в конечном итоге:

user.organizations.not_contacted_in_24_hours
0 голосов
/ 19 июля 2010

Ух ты, что слишком сложно усложнить простую задачу. Как насчет

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

Может быть, я что-то упускаю ... но вопрос только в том, как вернуть 'false', если массив включает в себя 'false', и это то, что он делает.

...