2011-01-26 72 views
5

我想在創建對象後跳過驗證。讓我們舉一個例子創建mongoid軌後跳過驗證

人有很多公司,公司有很多人

人有很多展示位置和展示位置屬於人 人只能有一個活動放置

放置模型來檢查,如果一個驗證一個人在保存時已經有一個活動的位置。

@placement is active placement 
@employment.placement = @person 

if @placement.save 
    ################# 
    @person.placements << @placement 
    @company.placements << @placement 
end 

現在,當第一次保存展示位置時,它將被保存。

現在的問題是當

@person.placements << @placement 

既然人已經通過@ placement.save有效的展示位置。

@ person.placements < < @placement再次保存@placement和驗證激發驗證錯誤到@placement對象。

有沒有什麼辦法讓我告訴不要通過特定驗證某些地方############我的代碼區域。

或者任何其他解決方案,歡迎。

感謝

+0

你應該接受的答案,如果它爲你工作。給這個人他的觀點。 :) – sujal 2011-07-29 16:03:12

回答

11

你可以使用:節省:驗證=>假

+0

但是,您如何保存:validate => false **同時使用<<運算符,因爲它同時保存@company和@placements?任何想法 – Gagan 2011-03-07 11:28:48

0

的第一件事情,如果你想所有的驗證後,以節省通過,那麼這樣做

if @placement.valid? 
    @person.placements << @placement 
    @company.placements << @placement 
end 

接下來的事情是,如果您使用的是兩份文件mongoid然後<<話務員呼叫.save

該解決方案可能會覆蓋mongoid的<<,或者需要說明在哪個操作期間進行的驗證。

validates :placeholder, :on => :create而且還是

if @placement.valid? 
    @placement.person = @person 
    @company.placements << @placement 
end