2012-04-23 4 views
-1

У меня есть 2 модели:исключая строки из другой таблицы

Subscriber 
    - id 
    - name:string 
    - email:string 

Submission 
    - id 
    - name:string 
    - email:string 
    - path:string 
    - ip:string 

Они не имеют никакого отношения.

Я хотел бы выбрать все строки из подписчиков и исключить строки с адресом электронной почты, вставленным в таблицу представления, где url равно 'some/path'.

Что является самым элегантным способом сделать это с помощью Rails?

ответ

1

Я действительно не получить то, что вы имеете в виду с: где URL равен «некоторые/путем» Но я думаю, вы можете просто добавить, что в качестве дополнительного условия ...

, если вы решите его с нормальным вложенным запросом вы получаете:

SELECT * 
FROM subscribers 
WHERE email NOT IN (Select email FROM Submission) 

Таким образом, в активной записи это будет:

subscribers.all(:conditions => ["email NOT IN (SELECT email from Submission)"]) 

Если вы не хотите написать, что вложенное выберите запрос, который вы можете также сделать:

emails = Submission.all 
subscribers.all(:conditions => ["email not in (?)", emails]) 

Я не тестировал его, но это должно быть что-то в этом роде.

+1

Для служебного использования «не существует» вместо «не в», – Vik

Смежные вопросы