Skip to content

Commit 712ef53

Browse files
committed
Reload schema after ignored_columns reassignment
reload column_names after ignored_columns assignment code review: remove unnecessary setup and move up reload_schema_from_cache
1 parent b69ac96 commit 712ef53

File tree

3 files changed

+10
-0
lines changed

3 files changed

+10
-0
lines changed

activerecord/lib/active_record/model_schema.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -288,6 +288,7 @@ def ignored_columns
288288
# Sets the columns names the model should ignore. Ignored columns won't have attribute
289289
# accessors defined, and won't be referenced in SQL queries.
290290
def ignored_columns=(columns)
291+
reload_schema_from_cache
291292
@ignored_columns = columns.map(&:to_s)
292293
end
293294

activerecord/test/cases/base_test.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,10 @@ def test_default_values_are_deeply_dupped
15031503
assert_equal "Developer: name", loaded_developer.name
15041504
end
15051505

1506+
test "when assigning new ignored columns it invalidates cache for column names" do
1507+
assert_not_includes ColumnNamesCachedDeveloper.column_names, "name"
1508+
end
1509+
15061510
test "ignored columns not included in SELECT" do
15071511
query = Developer.all.to_sql.downcase
15081512

activerecord/test/models/developer.rb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,3 +303,8 @@ class AttributedDeveloper < ActiveRecord::Base
303303

304304
self.ignored_columns += ["name"]
305305
end
306+
307+
class ColumnNamesCachedDeveloper < ActiveRecord::Base
308+
self.table_name = "developers"
309+
self.ignored_columns += ["name"] if column_names.include?("name")
310+
end

0 commit comments

Comments
 (0)