2011-11-08 10 views
5

Ben iç içe verilerle 2 modelleri var geçerli olmasa bile, her zaman doğru döndürür: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 
iç içe kayıtları yaparken iç içe modelde verilerin doğru yapmazsanız doğru doğrulama, örneğin, gerçekleşir

komuta böylece:

yanlış

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

getiri fakat güncelleme verilerine eğer:

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

hep

gerçek iç içe verileri geçerli değil yapsan bile eturns. Burada ebeveynin veri güncellemeleri ve geçerlilikleri ve ebeveynlerin verileri geçerli değilse false döndürür, yuvalanmış kayıtlardan biri geçerli değilse, kaydederken göz ardı edilir ve update_attributes true değerini döndürür. Tüm iç içe geçmiş veri zincirini güncelleme zamanında geçerlilikle ilgili verileri kontrol etme fırsatı var mı? Cevabınız için teşekkür ederim.

kullanıyorum: Yakut 1.8.7 KO 3.0.9 Mongoid 2.0.1

+0

MySQL'de de aynı şeyler olur. Raylar 3.0.11 –

+0

Basamaklı geri çağırma denediniz mi? – Baruch

cevap

1

validate için her modele "geçerli" fonksiyonunu kontrol edin. Lütfen kodunuza aşağıdaki kodu ekleyin:

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