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

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – rails多态,包含基于类的类型前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我们有这些模型
  1. class Message
  2. belongs_to :messageable,polymorphic: true
  3. end
  4.  
  5. class Ticket
  6. has_many :messages,as: :messageable
  7. has_many :comments
  8. end
  9.  
  10. class User
  11. has_many :messages,as: :messageable
  12. has_many :ratings
  13. end
  14.  
  15. class Rating
  16. belongs_to :user
  17. end
  18.  
  19. class Comment
  20. belongs_to :ticket
  21. end

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

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

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

解决方法

我可以想到的唯一方式是使用通用名称复制每个模型上的关联:
  1. class Ticket
  2. has_many :messages,as: :messageable
  3. has_many :comments
  4. has_many :messageable_includes,class_name: "Comment"
  5. end
  6.  
  7. class User
  8. has_many :messages,as: :messageable
  9. has_many :ratings
  10. has_many :messageable_includes,class_name: "Rating"
  11. end
  12.  
  13. Message.includes(:messageable => :messageable_includes) ...

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

猜你在找的Ruby相关文章