gpt4 book ai didi

ruby-on-rails - Rails 5 获取关联的关联

转载 作者:行者123 更新时间:2023-12-04 03:44:05 24 4
gpt4 key购买 nike

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

返回

Cannot eagerly load the polymorphic association :flaggable

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

最佳答案

这不是特定于过滤器的问题。使用多态关系可能会很痛苦,我遇到过类似的情况,我想我最终通过手动连接来解决这个问题。

你试试看是否可行?

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

关于ruby-on-rails - Rails 5 获取关联的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42298682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com