【问题标题】:How to map a mess of ActiveRecord relations into a single ActiveRecord::Relation object如何将一堆 ActiveRecord 关系映射到单个 ActiveRecord::Relation 对象中
【发布时间】:2013-09-27 07:09:32
【问题描述】:

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

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

现在,假设我想将以下数据放入视图中。 (假设所有需要的数据都可以通过单个 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
...

我确信这可以通过大量工作来实现,但是是否已经设置了一些东西可以做到这一点?

【问题讨论】:

  • 你认为PostSummary.count 是什么?发布记录?

标签: ruby-on-rails ruby activerecord


【解决方案1】:

执行您的建议似乎有点混乱。我建议将这些方法放在装饰器中。装饰器通常用于保存与视图相关的信息和方法,以避免模型膨胀。

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

【讨论】:

  • 我在 Draper 周围挖掘了一下,但乍一看,这似乎正是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 2014-07-01
  • 1970-01-01
  • 2012-03-21
  • 1970-01-01
相关资源
最近更新 更多