赞助商

ruby-on-rails – rails多态,包含基于类的类型

发布时间:2019-05-15 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了ruby-on-rails – rails多态,包含基于类的类型脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有这些模型
class Message
  belongs_to :messageable,polymorphic: true
end

class Ticket
  has_many :messages,as: :messageable
  has_many :comments
end

class User
  has_many :messages,as: :messageable
  has_many :ratings
end

class Rating
  belongs_to :user
end

class Comment
  belongs_to :ticket
end

现在我想加载所有的邮件(有相关的门票或用户)和热门的负载取决于类的类型,对用户的票和评价的评论

当然Message.includes(:messageable).order(“created_at desc”)将只包括直接关联的对象,但问题是如何包括从每个模型类型派生的不同的关联类型(即在这个例子中,如何以热门的方式加载用户的票证和评分)?

这只是一个简单的例子,但是甚至更复杂的情况呢,我想为用户添加其他内容,另一个关联,以及如果该关联需要更多的内容呢?

解决方法

我可以想到的唯一方式是使用通用名称复制每个模型上的关联:
class Ticket
  has_many :messages,as: :messageable
  has_many :comments
  has_many :messageable_includes,class_name: "Comment"
end

class User
  has_many :messages,as: :messageable
  has_many :ratings
  has_many :messageable_includes,class_name: "Rating"
end

Message.includes(:messageable => :messageable_includes) ...

我不知道我会用这个策略作为一个广泛的解决方案,但如果这是一个复杂的,你的情况下,它可能适用于你.

总结

以上是脚本之家为你收集整理的ruby-on-rails – rails多态,包含基于类的类型全部内容,希望文章能够帮你解决ruby-on-rails – rails多态,包含基于类的类型所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。
标签: