如何在Rails 5中获取关联的多态对象?

时间:2018-10-08 09:32:48

标签: ruby-on-rails ruby ruby-on-rails-5 associations

在我的Post模型中,我有

has_many :followers

在我的关注者模型中,我有

belongs_to :model
belongs_to :owner,polymorphic: true

在我的用户和管理员设计模型中,我有

has_many :followers,as: :owner

要求::我想要一个类似Post.owners的东西,它应该向我返回此帖子之后的所有用户和/或管理员的列表。

3 个答案:

答案 0 :(得分:2)

我不确定,但是我认为AR不能提供一种在一个查询中加载多态关联的方法。但是您可以使用:

post = Post.find(1)
post_followers = post.followers.includes(:owner)
post_owners = post_followers.map(&:owner)

答案 1 :(得分:2)

您要寻找的解决方案是多态的,它有很多方面。您可以在用户和管理员模型中添加这些行。

has_many :followers
has_many :posts, through: :followers, source: :owner, source_type: 'Owner'

答案 2 :(得分:0)

我认为您想要这样的东西:

const test = async (asyncFunc) => {
    return await asyncFunc()
}

test(async () => { 
    return "Hello World!"
}).then(console.log)

然后从您的User实例中,使用@ user.posts检索其帖子。 您的关注者@ follower.posts

也是如此

如果要转到帖子实例的父级,可以通过@ post.owner进行。但是,要使此工作有效,我们需要通过在使用引用形式声明多态接口的模型中声明外键列和类型列来正确设置架构:

class Post < ApplicationRecord
  belongs_to :owner, polymorphic: true
end

class User < ApplicationRecord
  has_many :posts, as: :owner
end

class Follower < ApplicationRecord
  has_many :posts, as: :owner
end