chronomodel
chronomodel copied to clipboard
Rails 6.0 breaks relations in historical models
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
Bisected to rails/rails@b6828fc91531ae0cc0a0f216705dd19112596301 rails/rails#36052
Change:
https://github.com/rails/rails/pull/36052/files#diff-3a4dbf4feb1b197bd1d507ebe3143b00615f3facd5d4469c7fa9f66f7322bcec