我有几种类似的模型(ContactEmail,ContactLetter,ContactPostalcard)。
例如,ContactEmail中的每个实例(记录)表示已将特定的电子邮件模板发送到特定的联系人。
因此,每个(例如ContactEmail)belongs_to :contact
因此,在ContactEmail模型中,有一个属性ContactEmail.contact_id
。
每个联系人都有一个虚拟属性company_name。
因此,当我编写以下内容时,我将获得在特定条件下发送的所有电子邮件(在这种情况下为时间):
@sent_emails = ContactEmail.find(:all, :conditions => "conditions here")
因此,
@sent_emails.size
会告诉我所有已发送电子邮件的总数。我的挑战:如何通过不同模型的独特公司提取更多的粒度?
我想要的输出如下所示:
FROM 8/1/10 TO 8/10/10 (where the dates are dynamic)
Calls Letter Postalcards
Company 1 4 2 4
Company 2 10 4 6
Company 3 2 3 4
因此,Company3有2个Calls,这意味着有两个ContactCalls记录,其中send_date介于两个日期之间,并且关联的联系人属于Company 3。
尚未提前设置公司1-3。需要从ContactCalls,ContactLetters和ContactPostalcards池中提取它。
面临的挑战是我不知道这些公司是什么。它们是每个不同记录的联系人部分的属性。因此,在某些情况下,我可能让Company2的字母为0。
感谢您的指导! :)
如何在给定记录的ContactEmail模型中找到公司:
ContactEmail.contact.company.name
这将返回关联公司的特定ContactEmail
最佳答案
这应该做得很好:
list = Contact.find :all,
:select => "companies.name company_name, COUNT(contact_emails.id) email_count, COUNT(contact_letters.id) letter_count, COUNT(contact_postalcards.id) postalcard_count",
:joins => [
"LEFT JOIN companies ON company.id = contact.company_id",
"LEFT JOIN contact_emails ON contact_emails.contact_id = contacts.id",
"LEFT JOIN contact_letters ON contact_letters.contact_id = contacts.id",
"LEFT JOIN contact_postalcards ON contact_postalcards.contact_id = contacts.id"
],
:group => "companies.id"
list.each do |item|
p item.company_name, item.email_count, item.letter_count, item.postalcard_count
end
关于ruby-on-rails - 如何从Rails中的ActiveRecords数组中提取 “table”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3486195/