Отмена сохранения в ruby on rails

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

    User.name = "alex"
    User.save

ArgumentError: неправильное количество аргументов (1 вместо 0)

Мой код такой, как показано ниже

class ActiveRecord::Base

  def save()
      p "in My save\n"
      Multidb.use(:default) do
          p "calling super\n"
      super()
      end
      p "saved\n"
  end

end

Чего вы пытаетесь достичь, переопределив save? Может быть, есть лучшее решение.

Stefan 10.09.2018 11:40
0
1
255
1

Ответы 1

Я считаю, что отменять такой важный метод публичного API ActiveRecord - ужасная идея.

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

def save(*args)
  # ...
  Multidb.use(:default) do
    super(*args)
  end
  # ...
end

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

Stefan 10.09.2018 11:16
"Я думаю, что это ужасная идея" - есть ли у вас предложение получше по OP?
Stefan 10.09.2018 11:21

Я решил не писать super, чтобы было понятнее, что должно произойти. Лучшее предложение? Зависит от того, чего ОП действительно хочет достичь. Я бы, наверное, просто создал метод с именем, которое упрощает понимание того, чем эта реализация отличается от исходного метода save - save_into_default_db?

spickermann 10.09.2018 11:33

Этот подход будет работать, если OP хочет иметь как исходный save, так и вариант, использующий конфигурацию базы данных :default. Однако если цель состоит в том, чтобы заставить модель User использовать конфигурацию :default, то использование другого имени метода, вероятно, не будет работать (подумайте о create или update, которые все еще вызывают save под капотом).

Stefan 10.09.2018 11:47

то, что я хочу достичь, в основном использовать default / master db только для запросов на запись, а для целей чтения он должен перейти на подчиненный db (который я установил по умолчанию в среде EB)

Harsimar Sandhu 10.09.2018 13:50

Другие вопросы по теме