Ruby On Rails самосохранение в модели - PullRequest
2 голосов
/ 02 ноября 2011

У меня есть функция в моей модели, которая изменяется следующим образом:

  def compare
        self.dirty = 1 if self.dirty == 0
        compare_recursive(0, MergeDigestTree.all)
        self.dirty = 0;
  end

Должен ли я вызывать self.save или это нормально, как это

Ответы [ 3 ]

5 голосов
/ 02 ноября 2011

Ваш вопрос открыт для двух толкований:

  • Вам нужно позвонить self.save, чтобы запись была сохранена в этот момент? да , поскольку назначение атрибута не фиксирует изменение в базе данных.

  • Вы обязаны позвонить self.save и таким образом сохранить запись? нет .Это нормально для метода, чтобы изменить экземпляр и оставить открытым решение, сохранять ли его на самом деле или нет.Я обычно предпочитаю такое поведение, так как вы предоставляете абоненту больше свободы.

В любом случае документируйте метод соответствующим образом.

2 голосов
/ 02 ноября 2011

Вам придется сохранить его самостоятельно, да.Хотя я не понимаю, что на самом деле делает этот метод.:)

1 голос
/ 02 ноября 2011

Нет, вам нужно вызвать save после внесения изменений, в какой-то момент после этой функции, если не в этой функции ...

, так что если вы используете эту функцию вручную в своем приложении ...

resource.compare()
resource.save

Хорошо, если вы не хотите помещать self.save в функцию сравнения.

...