Rails has_many通过查询 - 查找排除子集的所有内容

时间:2014-07-16 00:36:19

标签: sql ruby-on-rails

通过用户,我希望能够让所有公司都没有被用户收藏。

E.g。在公司{A,B,C,D,E,F}

如果用户1为{A,E}添加了书签

我希望能够查询用户获取{B,C,D,F}

class User < ActiveRecord::Base
    has_many :bookmarks
    has_many :companies, :through => :bookmarks
end

class Bookmark < ActiveRecord::Base
    belongs_to :user
    belongs_to :company
end

class Company < ActiveRecord::Base
    has_many :bookmarks
    has_many :users, :through => :bookmarks
end

1 个答案:

答案 0 :(得分:0)

你有逻辑失败。你只需要实现它

获取所有公司的记录

all_companies = Company.all

为用户提供所有公司

user_companies = User.find(id).companies

并减去两个数组

not_user_companies = all_companies - user_companies

我刚检查过,您可以相互减去ActiveRecord_Associations_CollectionProxy