Сохранение столбца состояния на переходе с помощью rubyist-aasm (действует как конечный автомат),

Вы были почти там, просто пропустили .groupby:

df['PrevValue'] = df.sort_values(['UUID', 'RANK']).groupby('UUID').Value.shift(1)

print(df)
         Date UUID  Value  RANK  PrevValue
0  01/03/2019    A      0     2        1.0
1  28/02/2019    A      1     1        NaN
2  28/02/2019    B      2     2        3.0
3  26/02/2019    B      3     1        NaN
4  24/02/2019    C      4     2        1.0
5  21/02/2019    C      1     1        NaN
8
задан Angela 25 March 2009 в 18:42
поделиться

4 ответа

Если вы вызовете форму bang! метода события перехода, состояние сохранится. Например, предположим, что у вас есть объект со следующим событием:

class Book < ActiveRecord::Base
  # ... 

  aasm_event :close do
    transitions :to => :closed, :from => [:opened]
  end

  # ...
end

Вызов book.close установит состояние закрыто , но не сохранит автоматически. Вызов book.close! устанавливает состояние * и * автоматически сохраняет объект AR.

15
ответ дан 5 December 2019 в 10:05
поделиться

Как предполагает Колин, AASM сохранит ваши изменения за вас. То, что сказал Маркус, совершенно неверно, за исключением того, что в последней версии гема есть ошибка.

В строке 180 lib / persistence / active_record_persistence.rb (вы можете получить это, запустив gem: unpack), Вы должны увидеть комментарий, в котором говорится:

Записывает состояние в столбец состояния и сохраняет его в базе данных. используя update_attribute (который обходит валидацию)

Однако в коде он фактически вызывает save!

unless self.save

Ошибка возникает, когда базовая модель не проходит валидацию, поскольку метод save по умолчанию не обходит валидацию. Быстрое решение было бы сделать вместо этого:

unless self.save(false)

Теперь переходы действительно сохраняют новое состояние в базе данных.

5
ответ дан 5 December 2019 в 10:05
поделиться

Я полагаю, что AASM сохранит состояние объекта после перехода. Посмотрите строки 180-189 в aasm/lib/persistence/active_record_persistence.rb

0
ответ дан 5 December 2019 в 10:05
поделиться

Я думаю, что необходимо сохранить в переходе, если это - эффект, Вы хотите. ActiveRecord (сверху которого находится aasm) не сохраняет записи автоматически дизайном.

Можно сделать сохранение в обратном вызове, если Вы хотите (и оно кажется, что Вы делаете).

-3
ответ дан 5 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: