3

導軌5,使用filterrific來過濾與關聯屬性的多態關聯的模型。導軌關聯的5獲取關聯

Flag 
    belongs_to :flaggable, polymorphic: true 
    belongs_to :reporter, class_name: "User" 

Post 
belongs_to :user 
has_many :flags, as: :flaggable 

Comment 
belongs_to :user 
has_many :flags, as: :flaggable 

對於filteriffic的工作,它需要在模型中定義的範圍,我試圖讓屬於某一用戶的任何標記的信息或評論。 flag.flaggable.user.id工作正常,但我似乎無法得到正確的範圍。

scope :with_owner_name, lambda { |post_owner| 
    includes(flaggable: :user).where(:post => {:user => [*post_owner]}) 
    } 

scope :with_owner_name, lambda { |post_owner| 
     includes(flaggable: :user).where(:flaggable => {:user => [*post_owner]}) 
     } 

回報

不能急於加載多態性關聯:flaggable

,並試圖包括每個flaggable型號分別做了同樣的。有沒有辦法做到這一點?我在filterrific關於多態範圍的文檔中找不到任何東西。我是否應該在Flag和Post/Comment用戶之間建立關聯?

回答

1

這不是一個過濾器的特定問題。處理多態關係可能是一個痛苦的工作,我有類似的情況,我想我做了一個手動連接來解決這個問題。

你可以試試,如果這個工程?

joins("INNER JOIN flags ON flags.flaggable_id = posts.id AND flags.flaggable_type = 'Post' INNER JOIN users ON users.id = flags.user_id") 

例如,

scope :with_owner_name, lambda { |post_owner| 
    joins("INNER JOIN flags ON flags.flaggable_id = posts.id AND flags.flaggable_type = 'Post' INNER JOIN users ON users.id = flags.user_id").where(:post => {:user => [*post_owner]}) 
}