как сказать «не в» в запросе активной записи - PullRequest
2 голосов
/ 06 января 2011

Эй, я надеюсь, что вы мне поможете,

@ courses = Course.where (:: id! = Current_user.courses)

Я хочу получить курсы, где находится текущий пользовательне зарегистрирован на

@ courses = Course.where (: id => current_user.courses) дает мне курсы, на которых пользователь зарегистрировался.Но я хочу наоборот

Ассоциации просто отлично.Я могу использовать current_user.courses или current_user.assignments.

Ответы [ 2 ]

6 голосов
/ 06 января 2011

Возможно, вам нужно что-то вроде этого:

@courses = Course.where("id NOT IN (?)", current_user.courses)

Причина, по которой вы не можете использовать чистый массив или условие хеширования, заключается в том, что вы отрицаете («НЕ В») запрос. Насколько я знаю, это невозможно сделать без использования строкового синтаксиса. Если вы просто хотите найти подходящие ("IN") элементы, вы можете использовать хеш-форму:

@courses = Course.where(:id => current_user.courses)

Это отрицательная ("НЕ В") часть, которая делает его хитрым.

Дополнительную информацию можно найти в Руководстве по интерфейсу запросов Active Record .

1 голос
/ 11 марта 2013

Если вы хотите избежать использования необработанных строк, вы можете использовать ARel

@courses = Course.where(Course.arel_table[:id].not_in(current_users.courses))

К сожалению, ARel не очень хорошо задокументировано.Я использую этот в качестве ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...