Honestly, I think there was a bad design
For a distance calculation, suggest using a different approach.
Props:
- no cache required
- SOLID
- no own written logic in models
Code for distance calculation logic:
require 'active_record' ActiveRecord::Base.logger = Logger.new STDOUT class Address < ActiveRecord::Base establish_connection adapter: 'sqlite3', database: 'foobar.db' connection.create_table table_name, force: true do |t| t.string :name t.decimal :latitude, precision: 15, scale: 13 t.decimal :longitude, precision: 15, scale: 13 t.references :addressable, polymorphic: true, index: true end belongs_to :addressable, polymorphic: true end class Shop < ActiveRecord::Base establish_connection adapter: 'sqlite3', database: 'foobar.db' connection.create_table table_name, force: true do |t| t.string :name end has_one :address, as: :addressable end class House < ActiveRecord::Base establish_connection adapter: 'sqlite3', database: 'foobar.db' connection.create_table table_name, force: true do |t| t.string :name end has_one :address, as: :addressable end class Measure def initialize address_from, address_to @address_from = address_from @address_to = address_to end def distance
You can run it with: $ ruby path_to_file.rb
And the result should be as follows:
"Shop:" #<Shop id: 1, name: "Food cort"> "House:" #<House id: 1, name: "My home"> "Distance between Food cort (Middleberge FL 32068) and My home (Tucson AZ 85705-7598): 20.02 meters"
source share