монгоидная область с ссылочным объектом в качестве критериев

У меня есть следующая область для модели Mongoid в Rails 3:

class Expert
  include Mongoid::Document
  referenced_in :category

   scope :currently_available, lambda { |category, limit|
    limit ||= 5
    {
      :where => {:category => category, :state => 'available'}, 
      :limit => limit
    }
  }

category вот пример ссылочной модели:

class Category
  include Mongoid::Document
  references_many :experts, :inverse_of => :category

Когда я называю область действия как Expert.currently_available(Category.first, 5), я получаю объект Criteria:

ruby-1.9.2-p136 :110 > Expert.currently_available(Category.first, 5)
 => #<Mongoid::Criteria
  selector: {:category=>#<Category _id: 4d95ea8773fdea4c47000003, _type: nil, _id: BSON::ObjectId('4d95ea8773fdea4c47000003'), title: "Tax Advisors", price: 5.5>, :state=>"available"},
  options:  {:limit=>5},
  class:    Expert,
  embedded: false>

Вопрос: как я могу загрузить коллекцию в соответствии с этими критериями? Когда я делаю .to_a, он говорит:
Cannot serialize an object of class Category into BSON

Сама категория является действительным объектом BSON при непосредственном выборе, но в области видимости она не может отображать ссылку на объект.

Заранее спасибо!


person denmarkin    schedule 02.04.2011    source источник
comment
:where => {:category => category._id, :state => 'available'}, вроде работает. Кто-нибудь может подтвердить/исправить меня, пожалуйста?   -  person denmarkin    schedule 02.04.2011
comment
Все еще не могу заставить его работать, к сожалению. Пробовал разные операторы монго с сопоставлением по категории._id - он просто возвращает пустой массив.   -  person denmarkin    schedule 03.04.2011


Ответы (1)


Это работает для меня (Монгоид 2.0):

:where => {:category_id => category.id, :state => 'available'}
person rubish    schedule 05.04.2011
comment
.id — это псевдоним для ._id. ruby-1.9.2-p136 :002 > e.id => BSON::ObjectId('4d9b5c6173fdeab5e6000008') ruby-1.9.2-p136 :003 > e._id => BSON::ObjectId('4d9b5c6173fdeab5e6000008') - person denmarkin; 06.04.2011
comment
Извините за задержку с ответом, но ключом здесь было использование category_id вместо категории. - person rubish; 12.04.2011