会社と地域に基づいてユーザーに投稿を表示する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属性と一致する投稿のみをプルします。