Как добавить эквивалент:: условия в область для модели? - PullRequest
1 голос
/ 09 августа 2010

У меня есть модель с именем Contact.

Я добавил следующий метод:

 def all_completed_events
   # for a given Contact, return all contact_events records that exist and where sugarcrm = false
   return (self.contact_letters + self.contact_postalcards + self.contact_emails + self.contact_voicemails + self.contact_calls)
 end

Чего не хватает, так это того, что я хочу, чтобы только self.contact_letters.find (: условие => "sugarcrm = false") было выбрано (sugarcrm является логическим) (очевидно, это применяется ко всем другим моделям, contact_letters, contact_emails, и так далее)

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 09 августа 2010

Вы также можете определить другую именованную область и добавить ее в цепочку:

named_scope nosugar, :conditions => { :sugarcrm => false }

def all_completed_events
  return self.contact_letters.nosugar + self.contact_postalcards.nosugar + ...
end

В зависимости от того, как реализована ваша модель ContactEvent (это STI? Возвращаете ли вы все contact_events или просто определенное их подмножество?), Вы можете получить что-то более похожее на:

return self.contact_events.nosugar
0 голосов
/ 09 августа 2010

Может быть попробовать это:

(self.contact_letters + self.contact_postalcards + self.contact_emails + self.contact_voicemails + self.contact_calls).select {|record| !record.sugarcrm }
...