2011-11-08 8 views
5

tengo 2 modelos con los datos anidada:update_attributes vuelve siempre es cierto, incluso si nested_attributes no son válidas

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 

Al realizar registros anidados, la validación correcta se lleva a cabo, por ejemplo, si los datos en el modelo anidado no corrigen , de modo de comando:

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

retornos falsos

pero si los datos de actualización:

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

siempre eturns cierto

Incluso si los datos anidados no hacer válida. Aquí las actualizaciones y los datos válidos de los padres y si los datos válidos de los padres no son válidos, devuelve falso, si uno de los registros anidados no es válido, se ignoran cuando se guardan y update_attributes devuelve verdadero. ¿Existe la oportunidad de verificar los datos de validez en el momento de actualizar toda la cadena de datos anidados? Gracias por tu respuesta.

que estoy usando: de Ruby 1.8.7 RoR 3.0.9 Mongoid 2.0.1

+0

Lo mismo sucede en MySQL. Rails 3.0.11 –

+0

¿Has probado la devolución de llamadas en cascada? – Baruch

Respuesta

1

Por favor revisar la función "válido" para cada modelo de validación. Agregue el código siguiente en su código:

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