2010-10-07 98 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])
相關問題