Rails 5,使用filterrific过滤关联属性上具有多态关联的模型。
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
并尝试单独包含每个可标记模型也是如此。有没有办法做到这一点?我无法在过滤器的文档中找到有关多态范围的任何内容。我应该在Flag和Post / Comment用户之间建立关联吗?
答案 0 :(得分: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")
E.g。
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]} )
}