создать объект, если объект потерпел неудачу before_save - PullRequest
0 голосов
/ 20 июля 2010

Модель

def before_save
  self.default_file_name = "#{self.model_name.underscore}.csv" if self.default_file_name.nil?
  self.default_directory_name = "public/uploads" if self.default_directory_name.nil?
  verify_methods
  verify_record
end

def verify_methods
  self.errors.add_to_base(_("Invalid row instance method.")) \
  if !self.each_row_instance_method.nil? && !self.model_name.constantize.instance_methods.include?(self.each_row_instance_method)

  self.errors.add_to_base(_("Invalid complete class method.")) \
  if !self.on_complete_class_method.nil? && !self.model_name.constantize.methods.include?(self.on_complete_class_method)

  return false if self.errors.count > 0
end

def verify_record
  self.csv_columns.each do |csv_column|
    self.errors.add_to_base(_("Invalid column name #{csv_column.column_name}.")) \
    unless self.model_name.constantize.column_names.include?(csv_column.column_name)
  end

  Log.create! :start_time => Time.now, :finish_time => Time.now,:message => self.errors.full_messages.to_s, :success => "N" if self.errors.count > 0

  return false if self.errors.count > 0
end

В этом коде я хочу создать новую строку журнала в моей базе данных, если self.errors содержит ошибки, но я не смог сохранить это, потому что объект не удалось сохранить, чем будет откат транзакции.

Как я могу справиться с этим ??

1 Ответ

0 голосов
/ 21 июля 2010

Вы можете просто создать журнал при сбое сохранения.

# on controller
if model.save
  # do something
else
  model.log!
end


# on the model
def log!
  Log.create! :start_time => Time.now, :finish_time => Time.now, :message => self.errors.full_messages.to_s, :success => "N" if self.errors.count > 0
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...