User.where (: id => [1,2]). Where (: id => 2) .arel.to_sql неожиданный результат - PullRequest
1 голос
/ 16 марта 2011

На консоли rails запуск следующего кода дает неожиданный результат:

User.where(:id => [1,2]).where(:id => 2).arel.to_sql
 => "SELECT `users`.* FROM `users` WHERE (`users`.`id` IN (1, 2) OR `users`.`id` = 2)"

Я не ожидаю, что это будет OR.

Этот пример является очень упрощенным примеромУ меня есть модель без таблицы User, которая определяет метод:

def cars
  Car.where(:id => list_of_users_car_ids_not_from_the_database)
end

, где Cars хранится в базе данных.Затем в контроллере

current_user.cars.find(params[:id])

(хорошо, это также упрощенный пример, но гораздо более яркий пример того, что я пытаюсь выполнить)

1 Ответ

1 голос
/ 16 марта 2011

Эти источники говорят, что он сломался между 3.0.3 и 3.0.4, но они "исправили" его в 3.0.5.

http://www.ruby -forum.com / topic / 1089054# new

http://groups.google.com/group/rubyonrails-core/browse_thread/thread/407f746fd1de6636

Они преднамеренно «сломали» его (исправляли ошибку и думали, что новое поведение лучше).Однако следует вернуться к версии 3.0.5.

...