Как я могу найти записи, чьи: name НЕ равны массиву, предоставленному другим запросом? - PullRequest
0 голосов
/ 29 декабря 2010

В настоящее время мои пользователи могут добавлять местоположения в свои профили с помощью формы, которая включает следующее заявление: (я использую RoR3, HAML, sqlite3 для dev и mysql для prod)

= select_tag "id", options_from_collection_for_select(Location.all, 'id', 'name')

Однакопозволяет пользователю добавлять одно и то же местоположение несколько раз.Я хотел бы перечислить только те места, которые пользователь НЕ опубликовал.Поэтому я хотел бы сделать что-то вроде:

Location.find(:all, :conditions => ["name != ?", user.locations])

Это, конечно, не работает, тогда как это так.

Location.find(:all, :conditions => ["name != ?", "New York"])

Это потому, что user.locations возвращает массив.Я не имею ни малейшего представления, как действовать в этой точке.Я полагаю, кроме изучения SQL.Есть ли способ для этого, который я не нахожу?

1 Ответ

3 голосов
/ 29 декабря 2010

Что-то вроде:

Location.find(:all, :conditions => ["name not in (?)", user.locations]) 

должно делать это (хотя, по общему признанию, менее эффективно, чем внешнее объединение и фильтрация нулевых user_ids) в зависимости от того, каков на самом деле ваш массив user.locations.

В качестве примечания, изучение SQL сделает вас гораздо более способным (и рыночным) веб-разработчиком ... пища для размышлений.

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