From 0172c8695812f35073bfd8cc9a9672dbad15840b Mon Sep 17 00:00:00 2001 From: bionickatana Date: Mon, 27 Jul 2026 18:32:56 -0600 Subject: [PATCH] Silly read only databases... --- app/controllers/joints_controller.rb | 14 ++++++++++ app/models/joints_dashboard.rb | 10 +++++++ app/views/joints/joints.html.erb | 39 +++++++++++++++++++++++++++ config/application.rb | 3 +++ config/database.yml | 8 ++++-- config/environments/development.rb | 4 +++ config/routes.rb | 1 + db/anat_proj.db | Bin 0 -> 49152 bytes test/fixtures/joints_dashboards.yml | 11 ++++++++ test/models/joints_dashboard_test.rb | 7 +++++ 10 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 app/controllers/joints_controller.rb create mode 100644 app/models/joints_dashboard.rb create mode 100644 app/views/joints/joints.html.erb create mode 100644 db/anat_proj.db create mode 100644 test/fixtures/joints_dashboards.yml create mode 100644 test/models/joints_dashboard_test.rb diff --git a/app/controllers/joints_controller.rb b/app/controllers/joints_controller.rb new file mode 100644 index 0000000..7d8eb74 --- /dev/null +++ b/app/controllers/joints_controller.rb @@ -0,0 +1,14 @@ +class JointsController < ApplicationController + def index + # Grab values: + @available_categories = JointsDashboard.distinct.pluck(:Joint) + + # Start with base query: + @records = JointsDashboard.all + + # Filter data based on dropdown selection params + @records = @records.where(Joint: params[:joint]) if params[:joint].present? + #@records = @records.where(Joint == params[:joint]) if params[:joint].present? + puts @records + end +end diff --git a/app/models/joints_dashboard.rb b/app/models/joints_dashboard.rb new file mode 100644 index 0000000..b8e8213 --- /dev/null +++ b/app/models/joints_dashboard.rb @@ -0,0 +1,10 @@ +class JointsDashboard < ApplicationRecord + self.table_name = "Joints" + + # Prevent actidental updates from code: + def readonly? + true + end + + +end diff --git a/app/views/joints/joints.html.erb b/app/views/joints/joints.html.erb new file mode 100644 index 0000000..7b2b2eb --- /dev/null +++ b/app/views/joints/joints.html.erb @@ -0,0 +1,39 @@ +

Excel Replacement Dashboard

+ + +<%= form_with url: dashboard_path, method: :get, local: true do |f| %> +
+ <%= f.label :category, "Select Category:" %> + <%= f.select :category, options_for_select(@available_categories, params[:category]), include_blank: "All Categories" %> +
+ +
+ <%= f.label :region, "Select Region:" %> + <%= f.select :region, options_for_select(@available_regions, params[:region]), include_blank: "All Regions" %> +
+ + <%= f.submit "Filter Data" %> +<% end %> + +
+ + +

Dashboard Results

+ + + + + + + + + + <% @records.each do |record| %> + + + + + + <% end %> + +
Column 1Column 2Value
<%= record.category_column %><%= record.region_column %><%= record.metric_value_column %>
diff --git a/config/application.rb b/config/application.rb index 72c6ba0..da8a7af 100644 --- a/config/application.rb +++ b/config/application.rb @@ -23,5 +23,8 @@ module Site # # config.time_zone = "Central Time (US & Canada)" # config.eager_load_paths << Rails.root.join("extras") + + # Disable activerecord performing migrations. + config.active_record.migration_error = false end end diff --git a/config/database.yml b/config/database.yml index 302d638..7dbd3f4 100644 --- a/config/database.yml +++ b/config/database.yml @@ -10,8 +10,12 @@ default: &default timeout: 5000 development: - <<: *default - database: storage/development.sqlite3 + adapter: sqlite3 + #database: "file:db/anat_proj.db?mode=ro" + database: "db/anat_proj.db" + #readonly: true + pool: 5 + timeout: 5000 # Warning: The database defined as "test" will be erased and # re-generated from your development database when you run "rake". diff --git a/config/environments/development.rb b/config/environments/development.rb index 75243c3..9cdb78c 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -75,4 +75,8 @@ Rails.application.configure do # Apply autocorrection by RuboCop to files generated by `bin/rails generate`. # config.generators.apply_rubocop_autocorrect_after_generate! + + config.active_record.migration_error = false + config.log_level = :debug + #config.active_record,verbose_query_logs = true end diff --git a/config/routes.rb b/config/routes.rb index 48254e8..39035e2 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -11,4 +11,5 @@ Rails.application.routes.draw do # Defines the root path route ("/") # root "posts#index" + root "joints#index" end diff --git a/db/anat_proj.db b/db/anat_proj.db new file mode 100644 index 0000000000000000000000000000000000000000..3d6847c408efb4ce412f2ef086a95ec067e41843 GIT binary patch literal 49152 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 literal 0 HcmV?d00001 diff --git a/test/fixtures/joints_dashboards.yml b/test/fixtures/joints_dashboards.yml new file mode 100644 index 0000000..d7a3329 --- /dev/null +++ b/test/fixtures/joints_dashboards.yml @@ -0,0 +1,11 @@ +# Read about fixtures at https://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +# This model initially had no columns defined. If you add columns to the +# model remove the "{}" from the fixture names and add the columns immediately +# below each fixture, per the syntax in the comments below +# +one: {} +# column: value +# +two: {} +# column: value diff --git a/test/models/joints_dashboard_test.rb b/test/models/joints_dashboard_test.rb new file mode 100644 index 0000000..afa550a --- /dev/null +++ b/test/models/joints_dashboard_test.rb @@ -0,0 +1,7 @@ +require "test_helper" + +class JointsDashboardTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end