源代码是
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
这有效,但想知道这是否是最佳方式。
答案 0 :(得分:0)
您的课程不再继承ActiveRecord
,而has_one
属于ActiveRecord
,因此无法使用。使用明确的key
似乎会起作用。
答案 1 :(得分: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