1
我在Rails的2 Mongoid文檔類與NN參照關係,如下圖所示:Mongoid查詢DB而在has_and_belongs_to_many關係相關聯的新的未保存記錄
class Band
include Mongoid::Document
field :name, type: String
field :_id, type: String, default: ->{ name }
has_and_belongs_to_many :tags
end
class Tag
include Mongoid::Document
field :name, type: String
field :_id, type: String, default: ->{ name }
has_and_belongs_to_many :bands
end
然後,我創建每一個新的實例,並將它們聯繫起來:
2.0.0p247 :014 > band = Band.new(name: "beetles")
=> #<Band _id: beetles, name: "beetles", tag_ids: nil>
2.0.0p247 :015 > tag = Tag.new(name: "rock")
=> #<Tag _id: rock, name: "rock", band_ids: nil>
2.0.0p247 :016 > band.tags << tag
MOPED: 127.0.0.1:27017 COMMAND database=admin command={:ismaster=>1} (1.3745ms)
MOPED: 127.0.0.1:27017 UPDATE database=band_dev collection=bands selector={"_id"=>"beetles"} update={"$addToSet"=>{"tag_ids"=>{"$each"=>["rock"]}}} flags=[] (0.2341ms)
=> [#<Tag _id: rock, name: "rock", band_ids: ["beetles"]>]
這裏調用數據庫來更新驅動程序類(在本例中爲「band」)。問題是這些實例都沒有保存,並且是全新的記錄!
2.0.0p247 :017 > band.new_record?
=> true
2.0.0p247 :018 > tag.new_record?
=> true
那麼爲什麼要爲未保存的文檔執行db往返?有沒有可以關閉此設置的設置?
版本信息:
mongoid (4.0.0 80ed36f)
moped (1.5.1)
origin (1.1.0)
bson (1.8.6)
bson_ext (1.8.6)
rails (4.0.0)
OS: Ubuntu 12.04 LTS
ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]
看到我的最後一次更新給予一個可能的解決方案 –