0

源代码是

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

当我做 target_feed.real_time_detail = RealTimeDetail.new(:url => " http://example.com ", :method => "get")

我出错了。

相反,我已将 TargetFeed 更改为

class TargetFeed
  include MongoMapper::Document  

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

end

这可行,但想知道这是否是最好的方法。

4

2 回答 2

0

您的类不再继承自ActiveRecord并且has_one属于ActiveRecord,因此无法使用。使用显式key似乎会起作用。

于 2011-05-31T22:30:04.090 回答
0

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),您将从其末尾使用 belongs_to:

class RealTimeDetail
  include MongoMapper::Document
  key :url, String
  key :method, String
  belongs_to :target_feed
end
于 2012-10-22T22:41:09.073 回答