has_one против определения в качестве ключа для встроенных документов для MongoMapper и MongoDB - PullRequest
0 голосов
/ 15 июня 2010

Исходный код

class RealTimeDetail
  include MongoMapper::EmbeddedDocument
  key :url, String
  key :method, String
end

class TargetFeed
  include MongoMapper::Document  

  key :name, String, :null => false
  key :feed_type, String, :null => false 
  has_one :real_time_detail

end

Когда я это делаю

Я получаю ошибку.

Вместо этого я изменил TargetFeed на

class TargetFeed
  include MongoMapper::Document  

  key :name, String, :null => false
  key :feed_type, String, :null => false 
  key :real_time_detail, RealTimeDetail

end

Это работает, но мне было интересно, если это лучший способ сделать это.

Ответы [ 2 ]

0 голосов
/ 23 октября 2012

MongoMapper использует другой синтаксис для реализации связей между моделями данных.Подробности здесь: http://mongomapper.com/documentation/plugins/associations.html

вкратце, вместо has_one, используйте one

class TargetFeed
  include MongoMapper::Document  

  key :name, String, :null => false
  key :feed_type, String, :null => false 
  one :real_time_detail

end

Я считаю, что поскольку вы определили RealTimeDetail как внедренный документвам не нужно объявлять связь в определении RealTimeDetail.Если бы RealTimeDetail включал Document (вместо EmbeddedDocument), вы бы использовали его от имени:

class RealTimeDetail
  include MongoMapper::Document
  key :url, String
  key :method, String
  belongs_to :target_feed
end
0 голосов
/ 01 июня 2011

Ваши классы больше не наследуются от ActiveRecord, а has_one принадлежит ActiveRecord, поэтому он недоступен для использования. Использование явного key кажется, что это сработало бы.

...