2011-01-03 22 views
1

私はユーザーコレクションを持っています。各ユーザーには、サポート要求の埋め込み文書の配列があります。MongoDB/Ruby(Mongoid):埋め込み文書のみを選択する方法

class User < MyModel 
    include Mongoid::Document 
    embeds_many :tickets 
    ... 
end 

class Ticket < MyModel 
    include Mongoid::Document 
    embedded_in :user, :inverse_of => :tickets 
    ... 
end 

管理セクションでは、すべてのサポートリクエストを選択するためのクエリを作成します。しかしチケットのコレクションは埋め込まれているので、私は直接問い合わせることはできません。これは私が持っているものです:

@users_with_pending_tickets = User.only(:tickets).where("tickets.status" => "Pending") 

<% for user in @users_with_pending_tickets %> 

    <% ticket = user.tickets.where(:status => "Pending").first %> 

    <%= ticket... %> 

<% end %> 

これは間違いなく醜いです。別の方法がありますか?

答えて

2

チケットをすべて取得する必要がある場合は、埋め込み関係の代わりにreferences_manyの関係にする必要があります。

MongoDBは最終的にこの共通の問題に対処するために '仮想コレクション'をサポートするべきですが、今のところこの制限を回避する必要があります。

詳細については、my answer to this similar questionを参照してください。

+0

答えをいただきありがとうございます、私は投票しました。彼らはこれを実装することを望む。 – Alex

+1

@Alex。投票していただきありがとうございます。私は本当に仮想コレクションを使用することもできます。 – bowsersenior

関連する問題