В Rails 4 можно сделать следующее:
User.where.not(id: id)
Вы можете обернуть его в хороший объем.
scope :all_except, ->(user) { where.not(id: user) }
@users = User.all_except(current_user)
Или используйте метод класса, если вы предпочитаете:
def self.all_except(user)
where.not(id: user)
end
Оба метода вернут объект отношения AR. Это означает, что вы можете связывать вызовы методов:
@users = User.all_except(current_user).paginate
Вы можете исключить любое количество пользователей, поскольку where()
также принимает массив.
@users = User.all_except([1,2,3])
Например:
@users = User.all_except(User.unverified)
И даже через другие ассоциации:
class Post < ActiveRecord::Base
has_many :comments
has_many :commenters, -> { uniq }, through: :comments
end
@commenters = @post.commenters.all_except(@post.author)
См. where.not()
в API Документах .