update_attributes всегда возвращает true, даже если nested_attributes недопустимы - PullRequest
4 голосов
/ 08 ноября 2011

У меня есть 2 модели с вложенными данными:

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])

всегда возвращается true

Даже если вложенные данные недействительны.Здесь родительские данные обновляются и действительны, и если родительские данные недействительны, возвращает false, если одна из вложенных записей недопустима, они игнорируются при сохранении, а update_attributes возвращает true.Есть ли возможность проверить данные на валидность во время обновления всей вложенной цепочки данных?Спасибо за ваш ответ.

Я использую: Ruby 1.8.7 RoR 3.0.9 Mongoid 2.0.1

1 Ответ

1 голос
/ 07 июля 2012

Пожалуйста, проверьте «действительные» функции для каждой модели для проверки.Пожалуйста, добавьте код, как показано ниже в вашем коде:

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