Rails 3: Arel НЕ СУЩЕСТВУЕТ?

Как написать NOT EXISTS на ареле? У меня проблемы с переводом этого запроса на Арел:

SELECT * FROM deals 
WHERE NOT EXISTS (
   SELECT 1 FROM reward_deals 
   WHERE reward_deals.deal_id = deal.id 
   AND NOT (
      reward_deals.awarding_type = 'deal' 
      AND reward_deals.deal_id = reward_deals.awarding_id
   )
 )

person neezer    schedule 22.08.2011    source источник


Ответы (1)


Вот ответ со странными именами, потому что я не знаю, как давать имена домену, который мне неизвестен.

deals = Deal.arel_table
reward_deals = RewardDeal.arel_table
awarding_condition= reward_deals[:awarding_type].eq('deal')\
                                .and(reward_deals[:deal_id]\
                                       .eq(reward_deals[:awarding_id]))

reward_deals_condition= reward_deals[:deal_id].eq(deals[:id])\
                              .and(awarding_condition.not)
Deal.where(RewardDeal.where(reward_deals_condition).exists.not)
person Pedro Rolo    schedule 23.08.2011
comment
Тем не менее, мой ответ - это ответ на ваш вопрос, и мое предположение верно. Почему вы не отметили мой ответ как правильный ?! - person Pedro Rolo; 24.08.2011
comment
Надо попробовать это на себе, прежде чем я смогу сделать это в качестве ответа. Похоже, это помогает. Спасибо! - person neezer; 31.08.2011