bullet_train-core icon indicating copy to clipboard operation
bullet_train-core copied to clipboard

Inability to use super scaffolding with self-referential models.

Open zackgilbert opened this issue 9 months ago • 7 comments

Hello. Stumbled on a potential bug with super scaffolding when creating a model that is self-referential (refers to itself).

If I do:

rails generate super_scaffold Scrape Team scrape:super_select

I get:

/.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/activesupport-7.1.3.2/lib/active_support/inflector/methods.rb:290:in `constantize': uninitialized constant Scrape (NameError)

      Object.const_get(camel_cased_word)
            ^^^^^^^^^^
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/activesupport-7.1.3.2/lib/active_support/core_ext/string/inflections.rb:74:in `constantize'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/scaffolding/script.rb:146:in `block in check_required_options_for_attributes'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/scaffolding/script.rb:91:in `each'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/scaffolding/script.rb:91:in `check_required_options_for_attributes'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/bullet_train/super_scaffolding/scaffolders/crud_scaffolder.rb:62:in `run'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/scaffolding/script.rb:212:in `<main>'
	from <internal:/.rbenv/versions/3.3.0/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
	from <internal:/.rbenv/versions/3.3.0/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/zeitwerk-2.6.13/lib/zeitwerk/kernel.rb:34:in `require'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/bullet_train/super_scaffolding.rb:29:in `run'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bullet_train-super_scaffolding-1.6.38/lib/generators/super_scaffold/super_scaffold_generator.rb:32:in `generate'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:134:in `block in invoke_all'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:134:in `each'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:134:in `map'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:134:in `invoke_all'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/group.rb:232:in `dispatch'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/base.rb:584:in `start'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/generators.rb:261:in `invoke'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/commands/generate/generate_command.rb:26:in `perform'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/command.rb:28:in `run'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor/invocation.rb:127:in `invoke_command'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/command/base.rb:178:in `invoke_command'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/thor-1.3.1/lib/thor.rb:527:in `dispatch'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/command/base.rb:73:in `perform'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/command.rb:71:in `block in invoke'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/command.rb:149:in `with_argv'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/command.rb:69:in `invoke'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/railties-7.1.3.2/lib/rails/commands.rb:18:in `<main>'
	from <internal:/.rbenv/versions/3.3.0/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
	from <internal:/.rbenv/versions/3.3.0/lib/ruby/3.3.0/rubygems/core_ext/kernel_require.rb>:37:in `require'
	from /.rbenv/versions/3.3.0/lib/ruby/gems/3.3.0/gems/bootsnap-1.18.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:30:in `require'
	from bin/rails:4:in `<main>'

Being that the model doesn't exist yet, it errors out when trying to figure out how to constantize.

Not sure the solution here. I ended up doing a manual rails g model command and using the --skip-migration-generation flag.

zackgilbert avatar May 03 '24 21:05 zackgilbert