У меня есть модель пользователя с :except_ids
объемом:Rails 3, не может посетить Arel :: SelectManager
scope :except_ids, ->(*ids) { where { id.not_in ids } }
Проблемы - я не могу использовать его с другими ленивыми запросами. Например, если я называю что-то вроде этого:
User.except_ids(User.except_ids(1,2))
Я заканчиваю с
TypeError: Cannot visit Arel::SelectManager
У меня есть гораздо более сложный запрос в моем проекте, но все работает отлично - за исключением того, что объем. Я могу заставить его работать, заменяя область действительным кодом, но это пахнет.
Итак, есть ли способ узнать это?
Ну, дело в том, что карта (&: id) будет загружать результаты для отношения внутри скобок. Пункт всех моих манипуляций - создать один гигантский запрос. – 2013-04-02 09:57:01
Я обновил свой ответ, пожалуйста, посмотрите. – mxgrn
Для большей эффективности с помощью решения с двойным запросом используйте вырезку, а не карту: 'User.except_ids (User.except_ids (1,2) .pluck ('id'))'. Это создает 'SELECT id', а не' SELECT * ', и возвращает его в массив с только идентификаторами. – zykadelic