2011-11-08 17 views
5

mam 2 modele z zagnieżdżonego danych:update_attributes powraca zawsze prawdziwe, nawet jeśli nested_attributes nie obowiązują

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 

Dokonując zagnieżdżone rekordy, poprawna walidacja odbywa się, na przykład, jeśli dane w zagnieżdżonych modelu nie poprawne , więc polecenia:

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

zwraca false

ale jeśli dane aktualizacji:

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

zawsze eturns prawda

dane Nawet jeśli zagnieżdżone nie obowiązuje. Tutaj dane i aktualizacje Valenta rodziców i jeśli dane rodziców nie są prawidłowe, zwracają wartość false, jeśli jeden z rekordów zagnieżdżonych jest nieprawidłowy, są one ignorowane podczas zapisywania, a update_attributes zwraca true. Czy istnieje możliwość sprawdzenia danych dotyczących ważności w czasie aktualizacji całego zagnieżdżonego łańcucha danych? Dziękuję za odpowiedź.

Używam: Ruby 1.8.7 ROR 3.0.9 Mongoid 2.0.1

+0

To samo dzieje się na MySQL. Rails 3.0.11 –

+0

Czy próbowałeś kaskadowania callbacków? – Baruch

Odpowiedz

1

Proszę sprawdzić "ważny" funkcji do każdego modelu zatwierdź. Dodaj kod w poniższym kodzie:

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