named_scope :active_advisor,
:joins => 'INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
INNER JOIN users u ON (u.id = l.user_id)',
:conditions => ['u.status = ?', User::Status::ACTIVE]
named_scope :for_customer, lambda{|customer_id| {
:joins => 'INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)',
:conditions => "l.user_id = #{customer_id}"}}
а получится кака с alias -ами и extra join
Mysql::Error: Not unique table/alias: 'l':
SELECT `favorite_listings`.* FROM `favorite_listings`
INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)
INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
INNER JOIN users u ON (u.id = l.user_id)
WHERE ((l.user_id = 123456) AND (u.status = 1))
named_scope :active_advisor,
:joins => ['INNER JOIN listings l ON (l.id = favorite_listings.listing_id)',
'INNER JOIN users u ON (u.id = l.user_id)'],
:conditions => ['u.status = ?', User::Status::ACTIVE]
named_scope :for_customer, lambda{|customer_id| {
:joins => ['INNER JOIN listings l ON (l.id = favorite_listings.listing_id)',
'LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)'],
:conditions => "l.user_id = #{customer_id}"}}
на выходе вменяемый SQL без лишних джойнов
SELECT `favorite_listings`.* FROM `favorite_listings`
INNER JOIN listings l ON (l.id = favorite_listings.listing_id)
LEFT JOIN customers c ON (c.user_id = l.user_id AND c.customer_id = favorite_listings.user_id)
INNER JOIN users u ON (u.id = l.user_id) WHERE ((l.user_id = 123456) AND (u.status = 1))
“Найдя ваше резюме в Интернете, я решил предложить
…
… Ввиду того, что объемы работ на этой должности не большие, начальство достаточно либерально относиться к дополнительной занятости работников.
”