1

МОДЕЛИ АССОЦИАЦИИRails 4 has_many через: фильтрацию записей из обоего связанных моделей

class User < ActiveRecord::Base 
    has_many :boards 
    has_many :cards, through: :boards 
end 

class Board < ActiveRecord::Base 
    belongs_to :user 
    has_many :cards 
end 

class Card < ActiveRecord::Base 
belongs_to :board 
end 

ВОССТАНОВЛЕНИЯ ЗАПИСИ

Карты и модель совета имеет атрибут называется 'закрытый'. Я хотел бы отфильтровать доски и карты, где «закрыто» равно true, при извлечении всех карт, принадлежащих current_user.

т.е.
если board.closed == правда, эта плата и все связанные с ним карты отфильтровываются
если card.closed == правда, эта индивидуальная карточка отфильтровывается


Это Безразлично «т работа, но показывает, что я пытаюсь сделать:

current_user.cards.where(card.closed == false, card.board.closed == false) 

ответ

1
Card 
    .joins(:board) 
    .where(
    cards: { closed: false }, 
    boards: { user_id: current_user.id, closed: false } 
) 

Или, если вы настаиваете на начиная с current_user:

current_user 
    .cards 
    .joins(:board) 
    .where(cards: { closed: false }, boards: { closed: false }) 
0

Я был в состоянии отфильтровать закрытые карты и карты, которые принадлежат к закрытому плату с этим:

current_user.cards.to_a.delete_if { |card| card.board.closed == true || card.closed == true } 
+0

это плохо, потому что Руби ОБРАБОТКА, и потенциально может убить всю память. См. Мой ответ для запроса ActiveRecord. –