Skip to content

Commit 70bf5ad

Browse files
authored
missing_non_null_constraint: ignore database views (#201)
1 parent 88c85d0 commit 70bf5ad

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

active_record_doctor.gemspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ Gem::Specification.new do |s|
2929
s.add_development_dependency "rake", "~> 13.2.1"
3030
s.add_development_dependency "rubocop", "~> 1.68.0"
3131
s.add_development_dependency "sqlite3", "~> 2.2.0"
32-
s.add_development_dependency "transient_record", "~> 2.0.0"
32+
s.add_development_dependency "transient_record", "~> 3.0.0"
3333
end

lib/active_record_doctor/detectors/missing_non_null_constraint.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,11 @@ def message(column:, table:)
3434

3535
def detect
3636
table_models = models.select(&:table_exists?).group_by(&:table_name)
37+
views = connection.views
3738

3839
table_models.each do |table, models|
3940
next if ignored?(table, config(:ignore_tables))
41+
next if views.include?(table)
4042

4143
concrete_models = models.reject do |model|
4244
model.abstract_class? || sti_base_model?(model)

test/active_record_doctor/detectors/missing_non_null_constraint_test.rb

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,24 @@ def test_not_null_check_constraint
259259
refute_problems
260260
end
261261

262+
def test_views_are_ignored
263+
Context.create_table(:old_comments, force: true) do |t|
264+
t.integer :user_id
265+
end
266+
267+
Context.execute(<<-SQL)
268+
CREATE VIEW comments AS SELECT * FROM old_comments
269+
SQL
270+
271+
Context.define_model(:Comment) do
272+
belongs_to :user, required: true
273+
end
274+
275+
refute_problems
276+
ensure
277+
Context.execute("DROP VIEW comments")
278+
end
279+
262280
def test_config_ignore_tables
263281
Context.create_table(:users) do |t|
264282
t.string :name, null: true

0 commit comments

Comments
 (0)