Переопределение метода сохранения в модели - PullRequest
0 голосов
/ 15 мая 2018

Я новичок в Ruby / Rails и хочу переопределить метод save, чтобы я мог выполнить некоторую проверку внутри себя перед вызовом фактического метода save, однако по некоторым причинам я получаю это исключение:

#<NoMethodError: undefined method `save' for true:TrueClass>

Это мой код для модуля и класса.

Модуль:

module OverrideSave

    def save
        super.save if some_condition_true
    end
  end

Класс:

class CardTransaction
  include Mongoid::Document
  include Mongoid::Timestamps::Created
  prepend OverrideSave

  field :type, type: String
  field :transaction_value, type: BigDecimal
  field :receipt_value, type: BigDecimal
  field :store_id, type: String

  belongs_to :card
end

Я неуверен, что пошло не так, есть идеи?

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Как говорит @ Marek

module OverrideSave

    def save
        super if some_condition_true
    end
end

Но переопределять метод save нехорошо, было бы лучше создать новый метод, который бы использовал метод save, поэтому у вас все еще есть save метод.

module OverrideSave
  def save_with_guard
     save if some_condition_true
  end
end
0 голосов
/ 15 мая 2018

Вам не нужно переопределять метод save для выше.Вы можете использовать before_save callback в вашей модели:

class CardTransaction
  before_save :do_some_validation

  private

  def do_some_validation
    # will get there before the save is called
    false if custom_validation
  end
end
0 голосов
/ 15 мая 2018

Почему вы пытаетесь позвонить save на все, что super (т.е. save) возвращает? Из вашего описания вы хотите что-то вроде этого:

def save
  # some additional work
  super
end
...