Цепочки именованных областей не работают должным образом - PullRequest
3 голосов
/ 10 июня 2010

У меня есть две простые именованные области действия, определенные так:

class Numbers < ActiveRecord::Base
  named_scope :even, :conditions => {:title => ['2','4','6']}
  named_scope :odd, :conditions => {:title => ['1','3','5']}
end

если я позвоню Numbers.even я вернусь 2,4,6, что правильно если я звоню Numbers.odd, я получаю 1,3,5, что правильно

Когда я соединяю их вместе, как это: Numbers.even.odd, я получаю 1,3,5, потому что это последняя область, на которую я ссылаюсь. Поэтому, если я скажу Numbers.odd.even, я получу 2,4,6.

Я бы ожидал получить 1,2,3,4,5,6, когда собрал их вместе. Еще один подход, который я попробовал, заключался в следующем:

named_scope :even, :conditions => ["title IN (?)", ['2', '4','6']]
named_scope :odd, :conditions => ["title IN (?)", ['1', '3','5']]

Но я не получаю результатов, когда объединяю их в цепочку, потому что создаваемый запрос выглядит так:

SELECT * FROM `numbers` 
WHERE ((title IN ('1','3','5')) AND (title IN ('2','4',6')))

Предложение 'AND' должно быть изменено на OR, но я не знаю, как это сделать. Может ли это быть проблемой с ActiveRecord?

1 Ответ

5 голосов
/ 10 июня 2010

Проблема в том, как ActiveRecord обрабатывает области.При применении нескольких областей результаты объединяются вместе с AND.Нет возможности использовать OR.

Вместо этого вам нужно объединить два набора результатов:

Numbers.even.all + Numbers.odd.all
...