2010-10-07 95 views
0

公司的has_many联系人如何计算和过滤Rails中的关联记录?

公司的has_many ContactEmails:通过=>:接触

ContactEmail belongs_to的联系

联系belongs_to的公司

联系的has_many ContactEmails

对于公司的特定实例,我怎样才能找到所有的ContactEmails和过滤属性,如date_sent?

我试过Company.ContactEmails,但我不认为它可以使该关联。

回答

0

您可能希望为此使用命名范围。这适用于Rails 2.3,但对Rails 3来说不会有太大变化。

我还没有测试过,但是像这样的东西应该可以工作。这些条件可能需要调整以进行适当的日期比较。

ContactEmail < ActiveRecord::Base 
    named_scope :by_date_sent, lambda {|d| { :conditions => ["date_sent = ?", d]}} 
end 

@company.contact_emails.by_date_sent(Date.today) 
+0

有趣......我不知道HAS_ONE:通过对Contactemails? – Angela 2010-10-07 03:46:14

+0

嗯...你是对的....我没有使用lambda命名作用域只是使用条件....我应该使用它吗?想知道为什么searchlogic不会让我做同样的事情....你熟悉searchlogic吗? – Angela 2010-10-07 03:49:32

+0

我不太熟悉searchlogic,除了阅读github自述文件以外。它似乎可以工作,但我没有看到任何处理日期的例子。我遇到过为此目的而使用它的人http://stackoverflow.com/questions/1829477/date-conditions-using-search-logic – 2010-10-07 04:25:34

0

至少2的方式来做到这一点的语义:

  1. 通过named_scope作为Beerlington曾建议(做正确的方式)。
  2. 只需通过条件的发现者:
    company.contact_emails.all(:conditions => ["date_sent = ?", d])
相关问题