1

Rails 3 と MongoMapper を使用しています。関連付けの結果にいくつかのレコードを追加したい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 に答える