chronomodel icon indicating copy to clipboard operation
chronomodel copied to clipboard

Rails 6.0 breaks relations in historical models

Open tagliala opened this issue 1 year ago • 1 comments

After Rails 6.0, chronomodel uses hid to search into relations when the historical object is associated without passing from the object itself

Country::History.find(france.history.last.id).attributes.fetch('id')
=> 1

Country::History.find(france.history.last.id).cities.to_sql
=> "SELECT \"cities\".* FROM \"cities\" WHERE \"cities\".\"country_id\" = 2"
    create_table :countries, temporal: true do |t|
      t.string :name

      t.timestamps
    end

    create_table :cities do |t|
      t.references :country
      t.string :name

      t.timestamps
    end
class Country < ApplicationRecord
  include ChronoModel::TimeMachine

  has_many :cities, dependent: :destroy

  validates :name, presence: true
end

class City < ApplicationRecord
  include ChronoModel::TimeMachine

  belongs_to :country

  validates :name, presence: true
end
france = Country.create!(name: 'France')
france.cities.create!(name: 'Paris')
france.update name: 'Francia'
Country::History.find(france.history.last.id).cities == Country::History.find(france.history.first.id).cities

Expected output

true

Actual output

false

tagliala avatar Oct 13 '22 14:10 tagliala

Bisected to rails/rails@b6828fc91531ae0cc0a0f216705dd19112596301 rails/rails#36052

Change:

https://github.com/rails/rails/pull/36052/files#diff-3a4dbf4feb1b197bd1d507ebe3143b00615f3facd5d4469c7fa9f66f7322bcec

tagliala avatar Oct 14 '22 21:10 tagliala