我有一個控制器有兩個不同的動作,但都需要這個相同的代碼,這是有點長,我怎麼能讓他們訪問這個相同的行爲,但保持乾爽?相同的代碼在控制器在軌道的不同動作 - 如何使DRY?
@list = Contact.find :all,
:select => "companies.name AS co_name,
companies.id AS comp_id,
COUNT(contact_emails.id) AS email_count,
COUNT(contact_calls.id) AS call_count,
COUNT(contact_letters.id) AS letter_count,
COUNT(contact_postalcards.id) AS postalcard_count",
:conditions => ['contact_emails.date_sent < ? and contact_emails.date_sent > ?',
report_end_date, report_start_date],
:joins => [
"LEFT JOIN companies ON companies.id = contacts.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",
"LEFT JOIN contact_calls ON contact_calls.contact_id = contacts.id"
],
#:group => "companies.id"
:group => "companies.name"
puts @list[0].attributes.inspect
這不回答你的問題,但我90%確定所有這些「連接」都可以替換爲「包含」。就像這樣::include => [:公司,:contact_emails,:contact_letters,:contact_postalcards,:contact_calls]。 – Brad 2010-09-29 15:28:09