1

我使用带有 MongoMapper 的 Rails 3。我想在has many关联结果中添加一些记录。

例如,user has_many posts

class User
  include MongoMapper::Document

  many :posts
end

默认情况下,它只会显示属于用户的帖子,但如果他/她在查询中指定了特殊选项(或在用户的设置菜单中,比如说show-commented=true),那么我还需要在用户留下任何评论的地方添加帖子。所以我认为重写posts方法

def posts
  super + (show_commented_posts ? commented_posts : [])
end

但它当然行不通。如何使用 mongo_mapper 正确覆盖此方法?或者有没有更好的方法来解决这个问题?

4

1 回答 1

2

在 mongomapper 上覆盖方法是一个非常糟糕的主意,你应该尽量避免这样做,因为它会产生很多难以追溯的问题(我之前已经被这个烧毁了)。

相反,您应该考虑使用范围,例如

class Post
  scope :related_to_user, lambda {|user| where('$or' => [ {user_id: user.id}, {'comments.user_id' => user.id}]) }
end

然后你可以打电话

Post.related_to_user(current_user)
于 2012-11-11T17:56:07.347 回答