我希望能夠在保存時替換MongoDB對象中的整個嵌入文檔 - HTML表單將包含整個新集。保存在Mongoid中替換嵌入文檔
我還希望它在保存之前驗證所有內容 - 即不要廢棄舊文檔,然後在添加之前驗證每個文檔。
我已經想出了一個實現,但它不是持久的 - 沒有任何新的嵌入式文檔出現。還有一個複雜因素是涉及到繼承。這裏是(簡化),模型的集合我到目前爲止有:
class Person
include Mongoid::Document
embeds_many :vehicles
end
class Vehicle
include Mongoid::Document
embedded_in :person
end
class Car < Vehicle
end
class Motorbike < Vehicle
end
爲了制定出當用戶提交表單來實例化什麼樣的車,我已經添加了這個方法來Person類:
def build_from_hash(hash)
@vehicles= []
hash.each do |idx, vehicle|
if vehicle[:_type].constantize < Inclusion # Check for inheritance, for security
self.vehicles.push vehicle[:_type].constantize.new(vehicle)
end
end
end
並修改了控制器來調用它:產生
def submit_build
@person= current_user.persons.find(params[:id])
@person.build_from_hash(params[:vehicles]) if params.has_key? :vehicles
respond_to do |format|
if @person.save # Also tried: @person.update_attributes(inclusions: @person.vehicles)
format.html { redirect_to @person, notice: 'Person was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "build" }
format.json { render json: @person.errors, status: :unprocessable_entity }
end
end
end
沒有錯誤 - 將頁面重定向如同它的工作,但是當我審視一遍有沒有embdedded文件。
使用Rails 3.2.8,Mongoid 3.0.5,MongoDB 1.8.3。