【问题标题】:Override mongomapper has_many association覆盖 mongomapper has_many 关联
【发布时间】:2012-11-09 23:17:36
【问题描述】:

我使用带有 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 正确覆盖此方法?或者有没有更好的方法来解决这个问题?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 design-patterns mongomapper


    【解决方案1】:

    在 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-23
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多