Skip to content

Commit 87b38b3

Browse files
committed
BREAKING CHANGE: Do not show models without table. Closes #3157
RailsAdmin no longer automatically exclude models for PaperTrail and ActiveStorage. Exclude manually if you don't need them. config.excluded_models = ['PaperTrail::Version', 'PaperTrail::VersionAssociation', 'ActiveStorage::Attachment', 'ActiveStorage::Blob']
1 parent 1550260 commit 87b38b3

File tree

7 files changed

+30
-15
lines changed

7 files changed

+30
-15
lines changed

lib/rails_admin/abstract_model.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def reset_polymorphic_parents
4646
def initialize(model_or_model_name)
4747
@model_name = model_or_model_name.to_s
4848
ancestors = model.ancestors.collect(&:to_s)
49-
if ancestors.include?('ActiveRecord::Base') && !model.abstract_class?
49+
if ancestors.include?('ActiveRecord::Base') && !model.abstract_class? && model.table_exists?
5050
initialize_active_record
5151
elsif ancestors.include?('Mongoid::Document')
5252
initialize_mongoid

lib/rails_admin/config.rb

+1-3
Original file line numberDiff line numberDiff line change
@@ -210,9 +210,7 @@ def default_search_operator=(operator)
210210

211211
# pool of all found model names from the whole application
212212
def models_pool
213-
excluded = (excluded_models.collect(&:to_s) + %w(RailsAdmin::History PaperTrail::Version PaperTrail::VersionAssociation ActiveStorage::Attachment ActiveStorage::Blob))
214-
215-
(viable_models - excluded).uniq.sort
213+
(viable_models - excluded_models.collect(&:to_s)).uniq.sort
216214
end
217215

218216
# Loads a model configuration instance from the registry or registers
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
class WithoutTable < ActiveRecord::Base
2+
end

spec/orm/active_record.rb

+8
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ def attribute_types
6262
Hash[columns.collect { |column| [column.name, lookup_attribute_type(column.type)] }]
6363
end
6464

65+
def table_exists?
66+
true
67+
end
68+
69+
def primary_key
70+
"id"
71+
end
72+
6573
private
6674

6775
def lookup_attribute_type(type)

spec/rails_admin/abstract_model_spec.rb

+10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
require 'spec_helper'
22

33
describe RailsAdmin::AbstractModel do
4+
describe '.all' do
5+
it 'returns abstract models for all models' do
6+
expect(RailsAdmin::AbstractModel.all.map(&:model)).to include Player, Team
7+
end
8+
9+
it 'does not pick up a model without table', active_record: true do
10+
expect(RailsAdmin::AbstractModel.all.map(&:model)).not_to include WithoutTable
11+
end
12+
end
13+
414
describe '#to_s' do
515
it 'returns model\'s name' do
616
expect(RailsAdmin::AbstractModel.new(Cms::BasicPage).to_s).to eq Cms::BasicPage.to_s

spec/rails_admin/adapters/active_record/association_spec.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -5,34 +5,34 @@
55
before :all do
66
RailsAdmin::AbstractModel.reset_polymorphic_parents
77

8-
class ARBlog < ActiveRecord::Base
8+
class ARBlog < Tableless
99
has_many :a_r_posts
1010
has_many :a_r_comments, as: :commentable
1111
belongs_to :librarian, polymorphic: true
1212
end
1313

14-
class ARPost < ActiveRecord::Base
14+
class ARPost < Tableless
1515
belongs_to :a_r_blog
1616
has_and_belongs_to_many :a_r_categories
1717
has_many :a_r_comments, as: :commentable
1818
end
1919

20-
class ARCategory < ActiveRecord::Base
20+
class ARCategory < Tableless
2121
has_and_belongs_to_many :a_r_posts
2222
belongs_to :librarian, polymorphic: true
2323
end
2424

25-
class ARUser < ActiveRecord::Base
25+
class ARUser < Tableless
2626
has_one :a_r_profile
2727
has_many :a_r_categories, as: :librarian
2828
end
2929

30-
class ARProfile < ActiveRecord::Base
30+
class ARProfile < Tableless
3131
belongs_to :a_r_user
3232
has_many :a_r_blogs, as: :librarian
3333
end
3434

35-
class ARComment < ActiveRecord::Base
35+
class ARComment < Tableless
3636
belongs_to :commentable, polymorphic: true
3737
end
3838

spec/rails_admin/adapters/active_record_spec.rb

+2-5
Original file line numberDiff line numberDiff line change
@@ -257,12 +257,9 @@ def build_statement(type, value, operator)
257257
end
258258

259259
it 'chooses like statement in per-model basis' do
260-
connection = double('connection')
261-
allow(FieldTest).to receive(:connection).and_return(connection)
262-
263-
allow(connection).to receive(:adapter_name).and_return('postgresql')
260+
allow(FieldTest.connection).to receive(:adapter_name).and_return('postgresql')
264261
expect(build_statement(:string, 'foo', 'default')).to eq(['(field ILIKE ?)', '%foo%'])
265-
allow(connection).to receive(:adapter_name).and_return('sqlite3')
262+
allow(FieldTest.connection).to receive(:adapter_name).and_return('sqlite3')
266263
expect(build_statement(:string, 'foo', 'default')).to eq(['(LOWER(field) LIKE ?)', '%foo%'])
267264
end
268265

0 commit comments

Comments
 (0)