【问题标题】:Rails 5 get association of associationRails 5获得协会协会
【发布时间】:2017-02-17 13:02:17
【问题描述】:

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

要使过滤器起作用,它需要在模型上定义一个范围,并且我正在尝试获取属于某个用户的任何标记的帖子或评论。 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

并尝试单独包含每个可标记模型也是如此。有没有办法做到这一点?我在 filterrific 的文档中找不到有关多态范围的任何内容。我是否应该在 Flag 和 Post/Comment 用户之间建立关联?

【问题讨论】:

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


    【解决方案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]} )
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多