Skip to content

Instantly share code, notes, and snippets.

@sinsoku
Last active March 26, 2019 09:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sinsoku/31802ed55f8dd482b3dda86ff01b5555 to your computer and use it in GitHub Desktop.
Save sinsoku/31802ed55f8dd482b3dda86ff01b5555 to your computer and use it in GitHub Desktop.
BiTemporal Data Modelをこんな感じで書きたいというネタ
class Employee
include Foo::BitemporalModel
# デフォルトにしたいなら、自分で書きたい
# default_scope { btdm_valid }
# findを上書きしたいなら、明示的に書きたい
# alias find btdm_find
end
Employee.btdm_valid.to_sql
# => SELECT "employees".* FROM "employees" WHERE "employees"."valid_from" <= '2019-01-20 00:00:00' AND "employees"."valid_to" > '2019-01-20 00:00:00' AND "employees"."deleted_at" IS NULL
employee = Employee.btdm_find(1)
employee.id #=> 1
employee.btdm_id #=> 1
employee.update(name: 'a') #=> true
employee.id #=> 2
employee.btdm_id #=> 1
employee.update(name: 'b') #=> true
employee.id #=> 3
employee.btdm_id #=> 1
employee = Foo.travel_to(1.minute.ago) { Employee.btdm_find(1) }
employee.id #=> 2
employee.foo_id #=> 1
employee.readonly? #=> true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment