【问题标题】:How do I add the equivalent of a :conditions into a scope for a model?如何将 :conditions 的等价物添加到模型的范围中?
【发布时间】:2010-08-09 03:54:50
【问题描述】:

我有一个名为 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(:conditions => "sugarcrm = false") 被选中(sugarcrm 是布尔值)。 (显然这适用于其他模型,contact_letters、contact_emails 等)

我该怎么做?

【问题讨论】:

    标签: ruby-on-rails scope boolean


    【解决方案1】:

    您还可以定义另一个命名范围并将其链接起来:

    named_scope nosugar, :conditions => { :sugarcrm => false }
    
    def all_completed_events
      return self.contact_letters.nosugar + self.contact_postalcards.nosugar + ...
    end
    

    取决于您的 ContactEvent 模型是如何实现的(是 STI 吗?您是返回 allcontact_events 还是仅返回其中的一个特定子集?)您可以将其归结为以下内容:

    return self.contact_events.nosugar
    

    【讨论】:

    • ContactEvent 不是模型。我有单独的 ContactLetter、ContactPostalcard 等。我可以将所有内容放在一起,然后在最后应用命名范围吗?
    • 我认为您应该能够像这样利用您的all_completed_events 方法:self.all_completed_events.nosugar。虽然不是 100% 确定 - 需要一个 rails 控制台来测试它!
    【解决方案2】:

    不妨试试这个:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      相关资源
      最近更新 更多