1

模型關聯軌道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 

檢索記錄

卡和主板模型已經「關閉」稱爲屬性。 我想在檢索屬於current_user的所有卡片時過濾掉「關閉」等於真的卡片和卡片。


如果board.closed == true,此板及其所有相關的卡都被過濾掉
如果card.closed == true,則此個人卡被過濾掉


這並未「T工作,但顯示了我想要做的事:

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

這是不好的,因爲它是Ruby的處理。第,並有可能殺死所有你的記憶。查看我對ActiveRecord查詢的回答 –