4

会社と地域に基づいてユーザーに投稿を表示するRails3.2ブログアプリがあります。また、別の会社または地域用に作成された場合でも、ユーザーが投稿の作成者である投稿を表示したいと思います(Postオブジェクトには地域と会社、およびUserオブジェクトがあります)。

MySQLで次のクエリを使用して同様のことを行いました。

SELECT * FROM Post WHERE approved = true AND hold = false AND 
((company_id IN (null, 'user_company_id') AND region IN (null, 'user_region_id')) 
OR author = 'user_id') ORDER BY published_date;

現在、Mongoid gemを使用してアプリをMongoDBに移行しています。これは、私が理解できない最後のクエリです。これまでに得たものは、OriginとSelectorの組み合わせを使用してドキュメントを呼び出します。

@posts = Post.and(
    {approved: true},
    {hold_publish: false},
    {"$or" => [
        {"$and" => [{:company_id.in => [nil, @user.company.id]}, {:region_id.in => [nil, @user.region.id]}]},{user_id: @user.id}
    ]}).desc(:published_date)

ただし、これは、company_idとregion_idがnullであるか、users属性と一致する投稿のみをプルします。

4

1 に答える 1

17

これがあなたのクエリです これを試してください -

Post.where(approved: true,hold_publish: true)
  .or(:company_id.in => [nil, @user.company.id],:region_id.in => [nil, @user.region.id])
  .or(user_id: @user.id)
  .desc(:published_date)
于 2012-09-08T07:03:25.483 に答える