save_change_to_ * работает неправильно при использовании гема "activerecord-typedstore" с Rails 5.2 - PullRequest
1 голос
/ 03 октября 2019

Мы используем activerecord-typedstore gem с приложением Rails 5.2. Все хорошо, кроме методов «грязных атрибутов» после обратных вызовов. Согласно странице с гемом, он должен работать с Rails 5.2, но есть простой способ воспроизвести проблему

Я не нашел способа исправить это сам, поэтому я опубликовал проблему в github камня: https://github.com/byroot/activerecord-typedstore/issues/78

В этом примере демонстрируется проблема:

class Profile < ApplicationRecord
  typed_store :properties do |p|
    p.string :phone
  end

  after_save :debug
  def debug
    puts "saved_change_to_phone #{saved_change_to_phone.inspect}"
  end
end

p = Profile.create(phone: "123")
p.save
p = Profile.last
p.phone = "456"
p.save

# Displays:
# saved_change_to_phone nil

Возможно ли получить стандартное поведение Rails 5.2 для сохраненных атрибутов после обратных вызовов? Или, может быть, есть альтернативный камень, который я могу использовать вместо этого?

1 Ответ

1 голос
/ 05 октября 2019

Я проверил ваш пример:

Единственный способ, которым я смог заставить его работать, это отключить методы доступа вот так:

# frozen_string_literal: true

class Profile < ApplicationRecord
  validates :phone, presence: true
  typed_store :properties, accessors: false do |p|
    p.string :phone
  end

  after_save :debug
  def debug
    puts "saved_change_to_phone #{saved_change_to_phone.inspect}"
  end
end

Результаты:

first second

Хотя я не знаю, является ли это желаемым вами поведением.

...