Извлеките все строки, у которых есть column_id в массиве идентификаторов, затем упорядочите по идентификатору

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

Я пытаюсь это сделать, не уверен, правильно ли я это делаю:

 User.where("region_id => ?", region_ids).order("id ASC")

region_ids = [1234,234322,234324,2343,....]
  

Также, сработает ли это, если region_ids пуст (не null, но empty)

Я вижу ошибку:

 check the manual that corresponds to your MySQL server version for the right syntax to use near '=> NULL) ORDER BY id ASC' at line 1:
  

Когда я был в режиме отладчика, я выводил region_ids, и это было [] .

Ответ №1:

Вы смешиваете синтаксис Ruby и SQL в строке. То, что вы хотите, больше похоже на ("region_id in (?)", region_ids) или ({ "region_id" => region_ids }) .

Комментарии:

1. в основном верно, но первым примером должен быть («region_id в (?)», region_ids).

2. Спасибо, я не мог вспомнить, когда Rails сделал это автоматически.

3. если region_ids равен [], отображается ли он как NULL в запросе? похоже, это для меня…

4. @Blankman Мое предположение состояло бы в том, что он будет генерировать SQL типа: region_id in () если region_ids пуст.

Ответ №2:

Вам нужно изменить порядок двух строк, region_ids должен быть установлен перед пользователем.где, потому что теперь region_ids равен НУЛЮ при вызове where().