2013-07-30 3 views
0

Я пытаюсь выбрать группы, которые @current_user не является членомрезультаты Без учета в has_many: через отношения в Rails 3

Соответствующие части моих моделей следующим образом:

class Group < ActiveRecord::Base 
    belongs_to :user 
    has_many :group_memberships 
    has_many :members, :class_name => "User", :through=>:group_memberships 
... 

class User < ActiveRecord::Base 
    has_many :group_memberships, :foreign_key => 'member_id' 
    has_many :groups, :through => :group_memberships 
... 

class GroupMembership < ActiveRecord::Base 
    belongs_to :member, :class_name=>"User" 
    belongs_to :group 
end 

Спасибо !

ответ

0

Вы могли бы попытаться сделать что-то вроде:

@groups = Group.where("id NOT IN (?)", current_user.groups) 

Более подробную информацию можно найти в Active Record Query.

+0

Ах .. это на самом деле более практично, чем предыдущий ответ .. и довольно очевидно. Благодарю. – errata

+0

EDIT: @groups = Group.where ("id NOT IN (?)", Current_user.groups) ... но да спасибо! – errata

+0

Нет проблем. Найти его гораздо эффективнее также – David

0

есть метод, как это:

def group_ids_not_a_member_of 
    # get all group_ids and subtract out the ids that he is a member of 
    Group.pluck('id') - current_user.groups.map(&:id) 
end 

затем

user.group_ids_not_a_member_of 
+0

Awesome. Кажется, работает. Можете ли вы направить меня к некоторой документации по оператору? – errata

+0

в основном Group.pluck ('id') вернет вам все идентификаторы группы, вторая часть представляет собой массив идентификаторов группы этого текущего пользователя. Так как это всего лишь массив целых чисел, вы можете сделать вычитание на нем (то есть Array1 - Array2). http://www.ruby-doc.org/core-2.0/Array.html#method-i-2D – timpone

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