2011-11-08 66 views
5

我有2種型號,嵌套數據:update_attributes方法返回總是正確的,即使nested_attributes無效

class Goodtender 

    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :name 
    field :count 
    references_many(:offerprices, :autosave => true) 
    accepts_nested_attributes_for :offerprices, :allow_destroy => true, :reject_if => :all_blank 

    validates_presence_of :name, :message => "Invalid" 
    validates_numericality_of :count, :message => 'Invalid' 
    validates_associated :offerprices, :message => 'Invalid' 


end 

class Offerprice 

    include Mongoid::Document 
    include Mongoid::Timestamps 

    field :summ 
    field :date_delivery, :type => DateTime 
    field :note 

    referenced_in :goodtender, :class_name => 'Goodtender' 

    validates_presence_of :date_delivery, :message => "Invalid" 
    validates_numericality_of :summ, :message => 'Invalid' 

end 

當進行嵌套記錄,正確的驗證發生,例如,如果在嵌套的模型數據不正確,所以命令:

@tender = Tender.new(params[:tender]) 
@tender.save 

返回false

但如果更新數據:

@tender = Tender.find(params[:id]) 
@tender.update_attributes(params[:tender]) 

總是反映真實

即使嵌套數據無效。這裏父母的數據更新和valid,如果父母的數據無效返回false,如果其中一個嵌套記錄無效, 它們在保存時被忽略,並且update_attributes返回true。是否有機會在更新所有嵌套數據鏈時檢查有效性數據?感謝您的回覆。

我使用: 的Ruby 1.8.7 回報率3.0.9 Mongoid 2.0.1

+0

相同的事情發生在MySQL上。 Rails 3.0.11 –

+0

您是否嘗試了級聯回調? – Baruch

回答

1

請檢查 「有效」 功能,每個模型進行驗證。 請在您的代碼中添加以下代碼:

@tender = Tender.find(params[:id]) <br/> 
@tender.fieldname=params[:name] <br/> 
if @tender.valid? <br/> 
    @tender.save <br/> 
end <br/>