bootstrap-ruby / bootstrap_form

Official repository of the bootstrap_form gem, a Rails form builder that makes it super easy to create beautiful-looking forms using Bootstrap 5.
MIT License
1.64k stars 352 forks source link

V 5.3.1 - Using ruby's %w() array shortcut in bootstrap_form_for statement causes 'ActionView::Template::Error:' #703

Closed ccasabona closed 9 months ago

ccasabona commented 9 months ago

After upgrading bootstrap_form to version 5.3.1, bootstrap_form_for statements that use the ruby %w() array shortcut for label_coland control_col are causing an ActionView::Template::Error: exception.

<%= bootstrap_form_for @charge_refunds, layout: :horizontal, data: { controller: :toggle }, label_col: %w(col-1 col-sm-4 col-md-3), control_col: %w(col-12 col-sm-7 col-md-5) do |f| %>

Here is the output:

E

Error:
UserWebmasterIntegrationTest#test_webmaster_access_to_financial_related_classes:
ActionView::Template::Error: undefined method `gsub' for ["col-1", "col-sm-4", "col-md-3"]:Array
    bootstrap_form (5.3.1) lib/bootstrap_form/form_builder.rb:107:in `offset_col'
    bootstrap_form (5.3.1) lib/bootstrap_form/form_group.rb:51:in `form_group_control_class'
    bootstrap_form (5.3.1) lib/bootstrap_form/form_group.rb:36:in `form_group_content'
    bootstrap_form (5.3.1) lib/bootstrap_form/form_group.rb:17:in `block in form_group'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:45:in `block in capture'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:209:in `with_output_buffer'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:45:in `capture'
    actionview (7.0.8) lib/action_view/helpers/tag_helper.rb:71:in `tag_string'
    actionview (7.0.8) lib/action_view/helpers/tag_helper.rb:189:in `method_missing'
    bootstrap_form (5.3.1) lib/bootstrap_form/form_group.rb:13:in `form_group'
    bootstrap_form (5.3.1) lib/bootstrap_form/inputs/check_box.rb:31:in `wrapper'
    bootstrap_form (5.3.1) lib/bootstrap_form/inputs/check_box.rb:19:in `check_box_with_bootstrap'
    app/views/charge_refunds/_form.html.erb:91
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:45:in `block in capture'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:209:in `with_output_buffer'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:45:in `capture'
    actionview (7.0.8) lib/action_view/helpers/tag_helper.rb:71:in `tag_string'
    actionview (7.0.8) lib/action_view/helpers/tag_helper.rb:189:in `method_missing'
    app/views/charge_refunds/_form.html.erb:90
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:45:in `block in capture'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:209:in `with_output_buffer'
    actionview (7.0.8) lib/action_view/helpers/capture_helper.rb:45:in `capture'
    actionview (7.0.8) lib/action_view/helpers/form_helper.rb:769:in `form_with'
    actionview (7.0.8) lib/action_view/helpers/form_helper.rb:460:in `form_for'
    bootstrap_form (5.3.1) lib/bootstrap_form/action_view_extensions/form_helper.rb:24:in `block in bootstrap_form_for'
    bootstrap_form (5.3.1) lib/bootstrap_form/action_view_extensions/form_helper.rb:57:in `with_bootstrap_form_field_error_proc'
    bootstrap_form (5.3.1) lib/bootstrap_form/action_view_extensions/form_helper.rb:23:in `bootstrap_form_for'
    app/views/charge_refunds/_form.html.erb:73
    actionview (7.0.8) lib/action_view/base.rb:244:in `public_send'
    actionview (7.0.8) lib/action_view/base.rb:244:in `_run'
    actionview (7.0.8) lib/action_view/template.rb:157:in `block in render'
    activesupport (7.0.8) lib/active_support/notifications.rb:208:in `instrument'
    actionview (7.0.8) lib/action_view/template.rb:361:in `instrument_render_template'
    actionview (7.0.8) lib/action_view/template.rb:155:in `render'
    actionview (7.0.8) lib/action_view/renderer/partial_renderer.rb:251:in `block in render_partial_template'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `block in instrument'
    activesupport (7.0.8) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `instrument'
    actionview (7.0.8) lib/action_view/renderer/partial_renderer.rb:246:in `render_partial_template'
    actionview (7.0.8) lib/action_view/renderer/partial_renderer.rb:237:in `render'
    actionview (7.0.8) lib/action_view/renderer/renderer.rb:81:in `render_partial_to_object'
    actionview (7.0.8) lib/action_view/renderer/renderer.rb:53:in `render_partial'
    actionview (7.0.8) lib/action_view/helpers/rendering_helper.rb:44:in `render'
    app/views/charge_refunds/new.html.erb:6
    actionview (7.0.8) lib/action_view/base.rb:244:in `public_send'
    actionview (7.0.8) lib/action_view/base.rb:244:in `_run'
    actionview (7.0.8) lib/action_view/template.rb:157:in `block in render'
    activesupport (7.0.8) lib/active_support/notifications.rb:208:in `instrument'
    actionview (7.0.8) lib/action_view/template.rb:361:in `instrument_render_template'
    actionview (7.0.8) lib/action_view/template.rb:155:in `render'
    actionview (7.0.8) lib/action_view/renderer/template_renderer.rb:65:in `block (2 levels) in render_template'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `block in instrument'
    activesupport (7.0.8) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `instrument'
    actionview (7.0.8) lib/action_view/renderer/template_renderer.rb:60:in `block in render_template'
    actionview (7.0.8) lib/action_view/renderer/template_renderer.rb:75:in `block in render_with_layout'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `block in instrument'
    activesupport (7.0.8) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `instrument'
    actionview (7.0.8) lib/action_view/renderer/template_renderer.rb:74:in `render_with_layout'
    actionview (7.0.8) lib/action_view/renderer/template_renderer.rb:59:in `render_template'
    actionview (7.0.8) lib/action_view/renderer/template_renderer.rb:11:in `render'
    actionview (7.0.8) lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'
    actionview (7.0.8) lib/action_view/renderer/renderer.rb:29:in `render_to_object'
    actionview (7.0.8) lib/action_view/rendering.rb:117:in `block in _render_template'
    actionview (7.0.8) lib/action_view/base.rb:270:in `in_rendering_context'
    actionview (7.0.8) lib/action_view/rendering.rb:116:in `_render_template'
    actionpack (7.0.8) lib/action_controller/metal/streaming.rb:216:in `_render_template'
    actionview (7.0.8) lib/action_view/rendering.rb:103:in `render_to_body'
    actionpack (7.0.8) lib/action_controller/metal/rendering.rb:158:in `render_to_body'
    actionpack (7.0.8) lib/action_controller/metal/renderers.rb:141:in `render_to_body'
    actionpack (7.0.8) lib/abstract_controller/rendering.rb:27:in `render'
    actionpack (7.0.8) lib/action_controller/metal/rendering.rb:139:in `render'
    actionpack (7.0.8) lib/action_controller/metal/instrumentation.rb:22:in `block (2 levels) in render'
    /Users/charlie/.rvm/rubies/ruby-3.2.2/lib/ruby/3.2.0/benchmark.rb:311:in `realtime'
    activesupport (7.0.8) lib/active_support/core_ext/benchmark.rb:14:in `ms'
    actionpack (7.0.8) lib/action_controller/metal/instrumentation.rb:22:in `block in render'
    actionpack (7.0.8) lib/action_controller/metal/instrumentation.rb:91:in `cleanup_view_runtime'
    activerecord (7.0.8) lib/active_record/railties/controller_runtime.rb:39:in `cleanup_view_runtime'
    actionpack (7.0.8) lib/action_controller/metal/instrumentation.rb:21:in `render'
    actionpack (7.0.8) lib/action_controller/metal/implicit_render.rb:35:in `default_render'
    actionpack (7.0.8) lib/action_controller/metal/basic_implicit_render.rb:7:in `send_action'
    actionpack (7.0.8) lib/abstract_controller/base.rb:215:in `process_action'
    actionpack (7.0.8) lib/action_controller/metal/rendering.rb:165:in `process_action'
    actionpack (7.0.8) lib/abstract_controller/callbacks.rb:234:in `block in process_action'
    activesupport (7.0.8) lib/active_support/callbacks.rb:118:in `block in run_callbacks'
    actiontext (7.0.8) lib/action_text/rendering.rb:20:in `with_renderer'
    actiontext (7.0.8) lib/action_text/engine.rb:69:in `block (4 levels) in <class:Engine>'
    activesupport (7.0.8) lib/active_support/callbacks.rb:127:in `instance_exec'
    activesupport (7.0.8) lib/active_support/callbacks.rb:127:in `block in run_callbacks'
    activesupport (7.0.8) lib/active_support/callbacks.rb:138:in `run_callbacks'
    actionpack (7.0.8) lib/abstract_controller/callbacks.rb:233:in `process_action'
    actionpack (7.0.8) lib/action_controller/metal/rescue.rb:23:in `process_action'
    actionpack (7.0.8) lib/action_controller/metal/instrumentation.rb:67:in `block in process_action'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `block in instrument'
    activesupport (7.0.8) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
    activesupport (7.0.8) lib/active_support/notifications.rb:206:in `instrument'
    actionpack (7.0.8) lib/action_controller/metal/instrumentation.rb:66:in `process_action'
    actionpack (7.0.8) lib/action_controller/metal/params_wrapper.rb:259:in `process_action'
    activerecord (7.0.8) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
    actionpack (7.0.8) lib/abstract_controller/base.rb:151:in `process'
    actionview (7.0.8) lib/action_view/rendering.rb:39:in `process'
    actionpack (7.0.8) lib/action_controller/metal.rb:188:in `dispatch'
    actionpack (7.0.8) lib/action_controller/metal.rb:251:in `dispatch'
    actionpack (7.0.8) lib/action_dispatch/routing/route_set.rb:49:in `dispatch'
    actionpack (7.0.8) lib/action_dispatch/routing/route_set.rb:32:in `serve'
    actionpack (7.0.8) lib/action_dispatch/journey/router.rb:50:in `block in serve'
    actionpack (7.0.8) lib/action_dispatch/journey/router.rb:32:in `each'
    actionpack (7.0.8) lib/action_dispatch/journey/router.rb:32:in `serve'
    actionpack (7.0.8) lib/action_dispatch/routing/route_set.rb:852:in `call'
    browser (5.3.1) lib/browser/middleware.rb:55:in `run_app'
    browser (5.3.1) lib/browser/middleware.rb:35:in `call'
    rails_fix_google_bot_accept (76276593140c) lib/rails_fix_google_bot_accept.rb:30:in `call'
    rack-attack (6.7.0) lib/rack/attack.rb:103:in `call'
    bullet (7.0.7) lib/bullet/rack.rb:17:in `call'
    rack-attack (6.7.0) lib/rack/attack.rb:110:in `call'
    rack (2.2.8) lib/rack/tempfile_reaper.rb:15:in `call'
    rack (2.2.8) lib/rack/etag.rb:27:in `call'
    rack (2.2.8) lib/rack/conditional_get.rb:27:in `call'
    rack (2.2.8) lib/rack/head.rb:12:in `call'
    actionpack (7.0.8) lib/action_dispatch/http/permissions_policy.rb:38:in `call'
    actionpack (7.0.8) lib/action_dispatch/http/content_security_policy.rb:36:in `call'
    rack (2.2.8) lib/rack/session/abstract/id.rb:266:in `context'
    rack (2.2.8) lib/rack/session/abstract/id.rb:260:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/cookies.rb:704:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
    activesupport (7.0.8) lib/active_support/callbacks.rb:99:in `run_callbacks'
    actionpack (7.0.8) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/debug_exceptions.rb:28:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/show_exceptions.rb:29:in `call'
    railties (7.0.8) lib/rails/rack/logger.rb:40:in `call_app'
    railties (7.0.8) lib/rails/rack/logger.rb:27:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/remote_ip.rb:93:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/request_id.rb:26:in `call'
    rack (2.2.8) lib/rack/method_override.rb:24:in `call'
    rack (2.2.8) lib/rack/runtime.rb:22:in `call'
    activesupport (7.0.8) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/executor.rb:14:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/static.rb:23:in `call'
    rack (2.2.8) lib/rack/sendfile.rb:110:in `call'
    actionpack (7.0.8) lib/action_dispatch/middleware/host_authorization.rb:131:in `call'
    rack-cors (2.0.1) lib/rack/cors.rb:102:in `call'
    railties (7.0.8) lib/rails/engine.rb:530:in `call'
    rack-test (2.1.0) lib/rack/test.rb:360:in `process_request'
    rack-test (2.1.0) lib/rack/test.rb:153:in `request'
    actionpack (7.0.8) lib/action_dispatch/testing/integration.rb:279:in `process'
    actionpack (7.0.8) lib/action_dispatch/testing/integration.rb:16:in `get'
    actionpack (7.0.8) lib/action_dispatch/testing/integration.rb:370:in `get'
    test/integration/user_webmaster_integration_test.rb:687:in `block in <class:UserWebmasterIntegrationTest>'
    minitest (5.20.0) lib/minitest/test.rb:94:in `block (3 levels) in run'
    minitest (5.20.0) lib/minitest/test.rb:191:in `capture_exceptions'
    minitest (5.20.0) lib/minitest/test.rb:89:in `block (2 levels) in run'
    minitest (5.20.0) lib/minitest.rb:299:in `time_it'
    minitest (5.20.0) lib/minitest/test.rb:88:in `block in run'
    minitest (5.20.0) lib/minitest.rb:408:in `on_signal'
    minitest (5.20.0) lib/minitest/test.rb:239:in `with_info_handler'
    minitest (5.20.0) lib/minitest/test.rb:87:in `run'
    activesupport (7.0.8) lib/active_support/executor/test_helper.rb:5:in `block in run'
    activesupport (7.0.8) lib/active_support/execution_wrapper.rb:105:in `perform'
    activesupport (7.0.8) lib/active_support/executor/test_helper.rb:5:in `run'
    minitest (5.20.0) lib/minitest.rb:1094:in `run_one_method'
    minitest (5.20.0) lib/minitest.rb:374:in `run_one_method'
    minitest (5.20.0) lib/minitest.rb:361:in `block (2 levels) in run'
    minitest (5.20.0) lib/minitest.rb:360:in `each'
    minitest (5.20.0) lib/minitest.rb:360:in `block in run'
    minitest (5.20.0) lib/minitest.rb:408:in `on_signal'
    minitest (5.20.0) lib/minitest.rb:395:in `with_info_handler'
    minitest (5.20.0) lib/minitest.rb:359:in `run'
    railties (7.0.8) lib/rails/test_unit/line_filtering.rb:10:in `run'
    minitest (5.20.0) lib/minitest.rb:185:in `block in __run'
    minitest (5.20.0) lib/minitest.rb:185:in `map'
    minitest (5.20.0) lib/minitest.rb:185:in `__run'
    minitest (5.20.0) lib/minitest.rb:162:in `run'
    minitest (5.20.0) lib/minitest.rb:86:in `block in autorun'

This works as expected in v 5.2.3. If you use quotes instead of %w(), it works in 5.3.1.

<%= bootstrap_form_for @charge_refund, layout: :horizontal, data: { controller: :toggle }, label_col: 'col-1 col-sm-4 col-md-3', control_col: 'col-12 col-sm-7 col-md-5' do |f| %>

Rails 7.0.8 Ruby 3.2.2 Bootstrap_form 5.3.1

donv commented 9 months ago

I cannot find any documentation or examples that use arrays for those arguments. Anybody?

donv commented 9 months ago

I think what has happened is that check_box_with_bootstrap now actually uses the horizontal layout while before it did not.

I am trying to find code that supports the label_col and control_col options as arrays, but so far I am unable to find such support.

ccasabona commented 9 months ago

That is interesting as it has always worked in previous versions of the bootstrap_form gem to use the array shortcut in this manner. I would also add that the %w() helper can be used in other rails view helpers such as the tag helper.

On Sep 15, 2023, at 3:31 PM, Uwe Kubosch @.***> wrote:

I think what has happened is that check_box_with_bootstrap now actually uses the horizontal layout while before it did not.

I am trying to find code that supports the label_col and control_col options as arrays, but so far I am unable to find such support.

— Reply to this email directly, view it on GitHub https://github.com/bootstrap-ruby/bootstrap_form/issues/703#issuecomment-1721745548, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQTUIVSLVSEYWHI6C52ZVTX2SUI5ANCNFSM6AAAAAA4Z66VFE. You are receiving this because you authored the thread.

donv commented 9 months ago

OK, I think I found it. I'll fix it and add some documentation for it.

donv commented 9 months ago

@ccasabona Could you try version 5.3.2 ?

ccasabona commented 9 months ago

Version 5.3.2 is working well. Thank you for looking in to this, and for this gem!

On Sep 15, 2023, at 4:38 PM, Uwe Kubosch @.***> wrote:

@ccasabona https://github.com/ccasabona Could you try version 5.3.2 ?

— Reply to this email directly, view it on GitHub https://github.com/bootstrap-ruby/bootstrap_form/issues/703#issuecomment-1721841382, or unsubscribe https://github.com/notifications/unsubscribe-auth/ABQTUIWBY2DHE7AM6HTSLPDX2S4FXANCNFSM6AAAAAA4Z66VFE. You are receiving this because you were mentioned.