Учитывая модель пользователя и аутентификации - Как вернуть всех пользователей без аутентификации.provider = "facebook" - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть две модели:

User (id)
Authentication (id, provider,..)

Как мне получить всех пользователей, у которых нет аутентификации.provider eq на "facebook"?

Спасибо

class Authentication < ActiveRecord::Base
  belongs_to :user    
end

class User < ActiveRecord::Base
    has_many :authentications

Ответы [ 3 ]

2 голосов
/ 22 декабря 2011

UPD. Пожалуйста, обратитесь к Ответу Осьминога-Пола для лучшего решения.

Полагаю, это будет выглядеть примерно так:

User.joins(:authentications).where("authentications.provider != 'facebook'")
2 голосов
/ 22 декабря 2011
User.joins("LEFT JOIN authentications ON authentications.user_id = users.id AND authentications.provider = 'facebook'").where("authentications.user_id IS NULL")

Позвольте мне объяснить это немного => authentications.user_id IS NULL даст вам всех пользователей, которые don't имеют соответствующую аутентификацию от facebook

0 голосов
/ 23 декабря 2011
User.select("DISTINCT users.*").joins("LEFT JOIN authentications ON authentications.user_id = users.id").where("authentications.provider != 'facebook'")

Вы должны использовать LEFT JOIN здесь, потому что с этим запросом вернутся также пользователи, которые не имеют никаких аутентификаций (т.е. пользователи, которые не имеют аутентификаций на Facebook, также являются пользователями, которые не имеют никаких аутентификаций) *

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