Rails 5获得关联关联

时间:2017-02-17 13:02:18

标签: ruby-on-rails associations polymorphic-associations filterrific

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用户之间建立关联吗?

1 个答案:

答案 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]} )
}