gpt4 book ai didi

ruby-on-rails - 如何将一堆 ActiveRecord 关系映射到单个 ActiveRecord::Relation 对象

转载 作者:太空宇宙 更新时间:2023-11-03 16:03:43 25 4
gpt4 key购买 nike

基本上,我想采用一组典型的 ActiveRecord 关系,使它看起来像一个单一的、更简单的关系。

假设我有典型的 PostCommentUser,其中一个帖子有很多评论,而评论有一个用户。

现在,假设我想将以下数据放入 View 中。 (假设所有需要的数据都可以通过单个 Arel 语句读取)。

post.title
post.tag.name
post.comments.last
post.comments.last.user.full_name

我只想通过一个名为 PostSummary 的新对象通过以下方法访问它们:

post_summary.title
post_summary.tag_name
post_summary.last_comment
post_summary.last_comment_user

到目前为止,还不是太棘手。它可以通过 OpenStruct 和一些映射来完成,但我希望 PostSummary 是一个只读的 ActiveRecord::Relation 对象,它允许您执行以下操作:

PostSummary.first.attributes #=> [title, tag_name, last_comment, last_comment_user]
PostSummary.count #=> 42
...

我确信这需要大量工作才能实现,但是是否已经设置了一些东西来执行此操作?

最佳答案

按照您的建议进行操作似乎有点麻烦。我建议将这些方法放在装饰器中。装饰器通常用于保存与 View 相关的信息和方法,以避免模型膨胀。

有关好的装饰器库,请参阅 Draper .

关于ruby-on-rails - 如何将一堆 ActiveRecord 关系映射到单个 ActiveRecord::Relation 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19039863/

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