--
You received this message because you are subscribed to the Google Groups "ActiveScaffold : Ruby on Rails Gem" group.
To unsubscribe from this group and stop receiving emails from it, send an email to activescaffol...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/activescaffold/9e2d7d57-0720-47a4-98c2-b12f9ecf0f20n%40googlegroups.com.
Hi Sergio,
Thanks again. I did as you suggested and created an override for column_renders_as. For some reason, I get “Subform is not enabled” when I force subform.
What would a controller config look like to enable/disable the subform? What is the method checking for the subform being enabled?
def column_renders_as(column)
puts "YES, we are here! #{column.name.inspect}"
if column.name == :travels
logger.debug "@@@@@@@@@"
logger.debug "column.association.nil? : #{column.association.nil?}"
logger.debug "column.form_ui : #{column.form_ui}"
logger.debug "!active_scaffold_config_for(column.association.klass).actions.include?(:subform) : #{!active_scaffold_config_for(column.association.klass).actions.include?(:subform)}"
logger.debug "@@@@@@@@@"
return :subform
end
if column.is_a? ActiveScaffold::DataStructures::ActionColumns
return :subsection
elsif column.active_record_class.locking_column.to_s == column.name.to_s or column.form_ui == :hidden
return :hidden
elsif column.association.nil? or column.form_ui or !active_scaffold_config_for(column.association.klass).actions.include?(:subform)
return :field
else
return :subform
end
end
Rendered /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/app/views/active_scaffold_overrides/_form_messages.html.erb (Duration: 0.4ms | Allocations: 147)
YES, we are here! :travels
@@@@@@@@@
column.association.nil? : false
column.form_ui :
!active_scaffold_config_for(column.association.klass).actions.include?(:subform) : true
@@@@@@@@@
Rendered /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/app/views/active_scaffold_overrides/_form.html.erb (Duration: 32.8ms | Allocations: 9586)
Rendered /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/app/views/active_scaffold_overrides/_base_form.html.erb (Duration: 37.9ms | Allocations: 14980)
Rendered /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/app/views/active_scaffold_overrides/_update_form.html.erb (Duration: 38.3ms | Allocations: 15249)
Completed 500 Internal Server Error in 84ms (ActiveRecord: 12.1ms | Allocations: 41633)
ActionView::Template::Error (Subform is not enabled. Please enable it or remove any references in your configuration (e.g. config.subform.columns = [...]).):
19: <%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id, :form_action => form_action, :scope => scope } %>
20: </li>
21: <% end %>
22: <% elsif renders_as == :subform and authorized -%>
23: <%= content_tag :li, active_scaffold_subform_attributes(column, column_css_class) do %>
24: <%= render_column(column, @record, renders_as, scope) %>
25: <% end %>
active_scaffold (ccfc9d71d522) lib/active_scaffold/config/core.rb:250:in `[]'
Here is my controller:
class SubTdnsController < ApplicationController
active_scaffold :"sub_tdn" do |conf|
conf.columns = [:title, :ordinal, :work_lead,
:pop_begin, :pop_end,
:introduction, :description_of_work, :software_classification,
:environment_impact, :data_sensitivity, :special_requirements,
:travels, :odcs, :gfis, :deliverables, :data_rights_notice ]
conf.create.columns = [
:travels, :odcs, :gfis, :deliverables,
:title, :ordinal, :work_lead,
:pop_begin, :pop_end,
:introduction, :description_of_work, :software_classification,
:environment_impact, :data_sensitivity, :special_requirements,
:data_rights_notice ]
conf.update.columns = [
:travels, :odcs, :gfis, :deliverables,
:title, :ordinal, :work_lead,
:pop_begin, :pop_end,
:introduction, :description_of_work, :software_classification,
:environment_impact, :data_sensitivity, :special_requirements,
:data_rights_notice ]
conf.list.columns = :sub_tdn_number, :title
conf.columns[:introduction].label = "1. Introduction"
conf.columns[:description_of_work].label = "2. Description of Work"
conf.columns[:software_classification].label = "3. Software Classification"
conf.columns[:environment_impact].label = "4. Environment Impact"
conf.columns[:data_sensitivity].label = "5. Data Sensitivity"
conf.columns[:special_requirements].label = "6. Special Requirements"
conf.columns[:travels].label = "7. Travel Requirements"
conf.columns[:odcs].label = "8. Other Direct Costs"
conf.columns[:gfis].label = "9. Government Furnished Items"
conf.columns[:deliverables].label= "10. Deliverables/Milestones"
conf.columns[:data_rights_notice].label= "11. Data Rights Notice"
conf.columns[:introduction].form_ui = :text_editor
conf.columns[:description_of_work].form_ui = :text_editor
conf.columns[:software_classification].form_ui = :text_editor
conf.columns[:environment_impact].form_ui = :text_editor
conf.columns[:data_sensitivity].form_ui = :text_editor
conf.columns[:special_requirements].form_ui = :text_editor
conf.columns[:data_rights_notice].form_ui = :text_editor
conf.action_links.add 'get_pdf', :type => :member, controller: :sub_tdns, action: :show, page: true, :parameters => {format: :pdf}
#conf.show.link.page = true
end
Hi Sergio,
Doh.. I eventually figured out that the conf.actions needs to include subform! Hopefully this will help someone in the future.
class OdcsController < ApplicationController
before_action :check_resource_permissions
active_scaffold :"odc" do |conf|
conf.label = '8. MISCELANEOUS PURCHASES AND OTHER DIRECT COSTS (ODCS)'
conf.subform.columns =[:line_item_number, :description, :qty, :justification ]
conf.columns = [:line_item_number, :description, :qty, :justification, :sub_tdn ]
conf.actions = [:delete, :list, :show, :search, :export, :subform]
conf.export.default_file_format = 'xlsx' # or 'csv'
end
But I am getting a new error when I try to add Another child record, for example with “Create Another Odc”
ActionView::Template::Error (undefined method `name' for nil:NilClass):
1: <%
2: subform_id = sub_form_list_id(:association => @column.name, :id => @parent_record.id || generated_id(@parent_record) || 99999999999)
3: associated_form = render :partial => "form_association_record", :object => @record, :locals => {:scope => @scope, :parent_record => @parent_record, :column => @column, :locked => @record.new_record? && @column.association.singular?}
4: options = {:singular => false}
5: if @column.association.singular?
active_scaffold (ccfc9d71d522) app/views/active_scaffold_overrides/edit_associated.js.erb:2
actionview (6.1.7.3) lib/action_view/base.rb:247:in `public_send'
actionview (6.1.7.3) lib/action_view/base.rb:247:in `_run'
Not sure if this is an AS bug? Or a problem somewhere in my code?
Thanks
Dennis
Hi Sergio,
I modified the class that is failing..
active_scaffold (ccfc9d71d522) lib/active_scaffold/extensions/action_controller_rendering.rb:19:in `render'
@column was nil, so I put in a setter.
I have defined all the columns in the travels controller I could think of, see below.
Not sure why it is trying to render “id”. Any other ideas?
----
# wrap the action rendering for ActiveScaffold controllers
module ActiveScaffold
module ActionController #:nodoc:
def render(*args, &block)
puts "@@@@@@@ DCB @@@@@ #{params}"
@column = active_scaffold_config.columns[params[:child_association]]
puts "@column.inspect #{@column.inspect}"
Started GET "/sub_tdns/18/edit_associated?association=sub_tdns&child_association=travels&parent_controller=sub_tdns&parent_scaffold=tdns&tdn_id=22" for ::1 at 2023-04-03 10:19:17 -0500
Processing by SubTdnsController#edit_associated as JS
Parameters: {"association"=>"sub_tdns", "child_association"=>"travels", "parent_controller"=>"sub_tdns", "parent_scaffold"=>"tdns", "tdn_id"=>"22", "id"=>"18"}
User Load (0.9ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 ORDER BY `users`.`id` ASC LIMIT 1
Role Load (1.0ms) SELECT `roles`.* FROM `roles` INNER JOIN `role_memberships` ON `roles`.`id` = `role_memberships`.`role_id` WHERE `role_memberships`.`user_id` = 1
↳ app/models/user.rb:33:in `collect'
@@@@@@@ DCB @@@@@ {"association"=>"sub_tdns", "child_association"=>"travels", "parent_controller"=>"sub_tdns", "parent_scaffold"=>"tdns", "tdn_id"=>"22", "controller"=>"sub_tdns", "action"=>"edit_associated", "id"=>"18"}
@column.inspect #<ActiveScaffold::DataStructures::Column:0x00007f819cac9a98 @name=:travels, @active_record_class=SubTdn(id: integer, sub_tdn_number: string, title: string, risk_mitigations: text, updated_by_id: integer, tdn_id: integer, ordinal: integer, work_lead_id: integer, work_lead_alternate_id: integer, tpoc_id: integer, tpoc_alternate_id: integer, pop_begin: date, pop_end: date, introduction: text, description_of_work: text, software_classification: text, environment_impact: text, data_sensitivity: text, special_requirements: text, data_rights_notice: text, created_at: datetime, updated_at: datetime), @column=nil, @delegated_association=nil, @cache_key="SubTdn#travels", @association=#<ActiveScaffold::DataStructures::Association::ActiveRecord:0x00007f819cac98b8 @association=#<ActiveRecord::Reflection::HasManyReflection:0x00007f819dc1b210 @name=:travels, @scope=nil, @options={:dependent=>:destroy}, @active_record=SubTdn(id: integer, sub_tdn_number: string, title: string, risk_mitigations: text, updated_by_id: integer, tdn_id: integer, ordinal: integer, work_lead_id: integer, work_lead_alternate_id: integer, tpoc_id: integer, tpoc_alternate_id: integer, pop_begin: date, pop_end: date, introduction: text, description_of_work: text, software_classification: text, environment_impact: text, data_sensitivity: text, special_requirements: text, data_rights_notice: text, created_at: datetime, updated_at: datetime), @klass=Travel(id: integer, line_item_number: string, purpose: text, number_of_travelers: integer, number_of_nights: integer, number_of_days: integer, from_date: date, to_date: date, destination: string, sub_tdn_id: integer, created_at: datetime, updated_at: datetime), @plural_name="travels", @constructable=true, @class_name="Travel", @inverse_name=:sub_tdn, @foreign_key="sub_tdn_id", @active_record_primary_key="id", @inverse_of=#<ActiveRecord::Reflection::BelongsToReflection:0x00007f819dcf2940 @name=:sub_tdn, @scope=nil, @options={}, @active_record=Travel(id: integer, line_item_number: string, purpose: text, number_of_travelers: integer, number_of_nights: integer, number_of_days: integer, from_date: date, to_date: date, destination: string, sub_tdn_id: integer, created_at: datetime, updated_at: datetime), @klass=SubTdn(id: integer, sub_tdn_number: string, title: string, risk_mitigations: text, updated_by_id: integer, tdn_id: integer, ordinal: integer, work_lead_id: integer, work_lead_alternate_id: integer, tpoc_id: integer, tpoc_alternate_id: integer, pop_begin: date, pop_end: date, introduction: text, description_of_work: text, software_classification: text, environment_impact: text, data_sensitivity: text, special_requirements: text, data_rights_notice: text, created_at: datetime, updated_at: datetime), @plural_name="sub_tdns", @constructable=true, @foreign_key="sub_tdn_id", @class_name="SubTdn", @inverse_name=nil>>>, @link=#<Proc:0x00007f81a5839428 /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/lib/active_scaffold/core.rb:140>, @autolink=true, @table="sub_tdns", @associated_limit=3, @associated_number=true, @show_blank_record=true, @send_form_on_update_column=nil, @select_columns=[], @text=true, @number=false, @options={}, @allow_add_existing=true, @css_class="", @required=nil, @sort=true, @search_sql=["`travels`.`id`"], @weight=500, @actions_for_association_links=[:new, :show, :update], @includes=[:travels], @label="7. Travel Requirements">
Rendering /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/app/views/active_scaffold_overrides/edit_associated.js.erb
Rendered /Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/gems/2.7.0/bundler/gems/active_scaffold-ccfc9d71d522/app/views/active_scaffold_overrides/edit_associated.js.erb (Duration: 2.9ms | Allocations: 1960)
Completed 500 Internal Server Error in 17ms (ActiveRecord: 1.9ms | Allocations: 8755)
ActionView::Template::Error (undefined method `id' for nil:NilClass):
1: <%
2: subform_id = sub_form_list_id(:association => @column.name, :id => @parent_record.id || generated_id(@parent_record) || 99999999999)
3: associated_form = render :partial => "form_association_record", :object => @record, :locals => {:scope => @scope, :parent_record => @parent_record, :column => @column, :locked => @record.new_record? && @column.association.singular?}
4: options = {:singular => false}
5: if @column.association.singular?
active_scaffold (ccfc9d71d522) app/views/active_scaffold_overrides/edit_associated.js.erb:2
actionview (6.1.7.3) lib/action_view/base.rb:247:in `public_send'
actionview (6.1.7.3) lib/action_view/base.rb:247:in `_run'
actionview (6.1.7.3) lib/action_view/template.rb:154:in `block in render'
activesupport (6.1.7.3) lib/active_support/notifications.rb:205:in `instrument'
actionview (6.1.7.3) lib/action_view/template.rb:345:in `instrument_render_template'
actionview (6.1.7.3) lib/action_view/template.rb:152:in `render'
actionview (6.1.7.3) lib/action_view/renderer/template_renderer.rb:61:in `block (2 levels) in render_template'
activesupport (6.1.7.3) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.7.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.7.3) lib/active_support/notifications.rb:203:in `instrument'
actionview (6.1.7.3) lib/action_view/renderer/template_renderer.rb:56:in `block in render_template'
actionview (6.1.7.3) lib/action_view/renderer/template_renderer.rb:75:in `render_with_layout'
actionview (6.1.7.3) lib/action_view/renderer/template_renderer.rb:55:in `render_template'
actionview (6.1.7.3) lib/action_view/renderer/template_renderer.rb:11:in `render'
actionview (6.1.7.3) lib/action_view/renderer/renderer.rb:61:in `render_template_to_object'
actionview (6.1.7.3) lib/action_view/renderer/renderer.rb:29:in `render_to_object'
actionview (6.1.7.3) lib/action_view/rendering.rb:117:in `block in _render_template'
actionview (6.1.7.3) lib/action_view/base.rb:273:in `in_rendering_context'
actionview (6.1.7.3) lib/action_view/rendering.rb:116:in `_render_template'
actionpack (6.1.7.3) lib/action_controller/metal/streaming.rb:218:in `_render_template'
actionview (6.1.7.3) lib/action_view/rendering.rb:103:in `render_to_body'
actionpack (6.1.7.3) lib/action_controller/metal/rendering.rb:52:in `render_to_body'
actionpack (6.1.7.3) lib/action_controller/metal/renderers.rb:142:in `render_to_body'
actionpack (6.1.7.3) lib/abstract_controller/rendering.rb:25:in `render'
actionpack (6.1.7.3) lib/action_controller/metal/rendering.rb:36:in `render'
actionpack (6.1.7.3) lib/action_controller/metal/instrumentation.rb:46:in `block (2 levels) in render'
/Users/dbulgatz/.rbenv/versions/2.7.6/lib/ruby/2.7.0/benchmark.rb:308:in `realtime'
activesupport (6.1.7.3) lib/active_support/core_ext/benchmark.rb:14:in `ms'
actionpack (6.1.7.3) lib/action_controller/metal/instrumentation.rb:46:in `block in render'
actionpack (6.1.7.3) lib/action_controller/metal/instrumentation.rb:86:in `cleanup_view_runtime'
activerecord (6.1.7.3) lib/active_record/railties/controller_runtime.rb:34:in `cleanup_view_runtime'
actionpack (6.1.7.3) lib/action_controller/metal/instrumentation.rb:45:in `render'
active_scaffold (ccfc9d71d522) lib/active_scaffold/extensions/action_controller_rendering.rb:19:in `render'
wicked_pdf (2.6.3) lib/wicked_pdf/pdf_helper.rb:18:in `render'
actionpack (6.1.7.3) lib/action_controller/metal/implicit_render.rb:35:in `default_render'
actionpack (6.1.7.3) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (6.1.7.3) lib/abstract_controller/base.rb:228:in `process_action'
actionpack (6.1.7.3) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (6.1.7.3) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (6.1.7.3) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
active_scaffold (ccfc9d71d522) lib/active_scaffold/actions/core.rb:312:in `clear_storage'
activesupport (6.1.7.3) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
actiontext (6.1.7.3) lib/action_text/rendering.rb:20:in `with_renderer'
actiontext (6.1.7.3) lib/action_text/engine.rb:59:in `block (4 levels) in <class:Engine>'
activesupport (6.1.7.3) lib/active_support/callbacks.rb:126:in `instance_exec'
activesupport (6.1.7.3) lib/active_support/callbacks.rb:126:in `block in run_callbacks'
activesupport (6.1.7.3) lib/active_support/callbacks.rb:137:in `run_callbacks'
actionpack (6.1.7.3) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (6.1.7.3) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (6.1.7.3) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (6.1.7.3) lib/active_support/notifications.rb:203:in `block in instrument'
activesupport (6.1.7.3) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
activesupport (6.1.7.3) lib/active_support/notifications.rb:203:in `instrument'
actionpack (6.1.7.3) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
actionpack (6.1.7.3) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
activerecord (6.1.7.3) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
actionpack (6.1.7.3) lib/abstract_controller/base.rb:165:in `process'
actionview (6.1.7.3) lib/action_view/rendering.rb:39:in `process'
actionpack (6.1.7.3) lib/action_controller/metal.rb:190:in `dispatch'
actionpack (6.1.7.3) lib/action_controller/metal.rb:254:in `dispatch'
actionpack (6.1.7.3) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
actionpack (6.1.7.3) lib/action_dispatch/routing/route_set.rb:33:in `serve'
actionpack (6.1.7.3) lib/action_dispatch/journey/router.rb:50:in `block in serve'
actionpack (6.1.7.3) lib/action_dispatch/journey/router.rb:32:in `each'
actionpack (6.1.7.3) lib/action_dispatch/journey/router.rb:32:in `serve'
actionpack (6.1.7.3) lib/action_dispatch/routing/route_set.rb:842:in `call'
warden (1.2.9) lib/warden/manager.rb:36:in `block in call'
warden (1.2.9) lib/warden/manager.rb:34:in `catch'
warden (1.2.9) lib/warden/manager.rb:34:in `call'
rack (2.2.6.4) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.6.4) lib/rack/etag.rb:27:in `call'
rack (2.2.6.4) lib/rack/conditional_get.rb:27:in `call'
rack (2.2.6.4) lib/rack/head.rb:12:in `call'
actionpack (6.1.7.3) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
actionpack (6.1.7.3) lib/action_dispatch/http/content_security_policy.rb:19:in `call'
rack (2.2.6.4) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.6.4) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/cookies.rb:697:in `call'
activerecord (6.1.7.3) lib/active_record/migration.rb:601:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
activesupport (6.1.7.3) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (6.1.7.3) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
web-console (4.2.0) lib/web_console/middleware.rb:132:in `call_app'
web-console (4.2.0) lib/web_console/middleware.rb:28:in `block in call'
web-console (4.2.0) lib/web_console/middleware.rb:17:in `catch'
web-console (4.2.0) lib/web_console/middleware.rb:17:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (6.1.7.3) lib/rails/rack/logger.rb:37:in `call_app'
railties (6.1.7.3) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (6.1.7.3) lib/active_support/tagged_logging.rb:99:in `block in tagged'
activesupport (6.1.7.3) lib/active_support/tagged_logging.rb:37:in `tagged'
activesupport (6.1.7.3) lib/active_support/tagged_logging.rb:99:in `tagged'
railties (6.1.7.3) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.4.2) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
request_store (1.5.1) lib/request_store/middleware.rb:19:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/request_id.rb:26:in `call'
rack (2.2.6.4) lib/rack/method_override.rb:24:in `call'
rack (2.2.6.4) lib/rack/runtime.rb:22:in `call'
activesupport (6.1.7.3) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/static.rb:24:in `call'
rack (2.2.6.4) lib/rack/sendfile.rb:110:in `call'
actionpack (6.1.7.3) lib/action_dispatch/middleware/host_authorization.rb:148:in `call'
rack-mini-profiler (2.3.4) lib/mini_profiler/profiler.rb:393:in `call'
webpacker (5.4.4) lib/webpacker/dev_server_proxy.rb:25:in `perform_request'
rack-proxy (0.7.6) lib/rack/proxy.rb:87:in `call'
railties (6.1.7.3) lib/rails/engine.rb:539:in `call'
puma (5.6.5) lib/puma/configuration.rb:252:in `call'
puma (5.6.5) lib/puma/request.rb:77:in `block in handle_request'
puma (5.6.5) lib/puma/thread_pool.rb:340:in `with_force_shutdown'
puma (5.6.5) lib/puma/request.rb:76:in `handle_request'
puma (5.6.5) lib/puma/server.rb:443:in `process_client'
puma (5.6.5) lib/puma/thread_pool.rb:147:in `block in spawn_thread'
lass TravelsController < ApplicationController
before_action :check_resource_permissions
active_scaffold :"travel" do |conf|
conf.label = '7. TRAVEL REQUIREMENTS'
conf.columns = [:line_item_number, :purpose, :number_of_travelers, :number_of_nights, :number_of_days,
:from_date, :to_date, :destination]
conf.subform.columns = [:line_item_number, :purpose, :number_of_travelers, :number_of_nights, :number_of_days,
:from_date, :to_date, :destination]
conf.list.columns = [:line_item_number, :purpose, :number_of_travelers, :number_of_nights, :number_of_days,
:from_date, :to_date, :destination, :sub_tdn]
conf.create.columns = :line_item_number, :purpose, :number_of_travelers, :number_of_nights, :number_of_days,
:from_date, :to_date, :destination
conf.update.columns = :line_item_number, :purpose, :number_of_travelers, :number_of_nights, :number_of_days,
:from_date, :to_date, :destination
conf.actions = [:create, :delete, :list, :show, :search, :export, :subform]
conf.export.default_file_format = 'xlsx' # or 'csv'
end
private
def create_authorized?
current_user.has_role_name?("TDN_Manager")
end
def export_authorized?
current_user.has_tdn_access?
end
def check_resource_permissions
unless current_user.has_tdn_access?
redirect_to welcome_index_path, alert: "User #{current_user.to_label} does not have #{controller_name.humanize.upcase} Access"
end
end
Hi Sergio,
I created a hack that works.. not sure how this could be incorporated into AS code generically? Was thinking I should use build to create the related association @record, but this seems to work as is.
# wrap the action rendering for ActiveScaffold controllers
module ActiveScaffold
module ActionController #:nodoc:
def render(*args, &block)
puts "@@@@@@@ DCB @@@@@ #{params}"
if params[:action] == 'edit_associated'
@column = active_scaffold_config.columns[params[:child_association]]
parent_model_name = params[:parent_controller].classify.singularize
@parent_record ||= parent_model_name.constantize.find(params[:id])
puts "Parent Model Name: #{parent_model_name}"
puts "@parent_record.inspect #{@parent_record.inspect}"
child_model_name = params[:child_association].classify.singularize
puts "Child Model Name: #{child_model_name}"
@record ||= child_model_name.classify.constantize.new
puts "@record.inspect #{@record.inspect}"
puts "@column.inspect #{@column.inspect}"
puts "@parent_record.inspect #{@parent_record.inspect}"
puts "@record.inspect #{@record.inspect}"
end
Hi Sergio,
Here is the final “monkey patch” is used to address:
# wrap the action rendering for ActiveScaffold controllers
# DCB: Added this HACK to fix issue where cannot add new child association inside sub_tdn edit
module ActiveScaffold
module ActionController #:nodoc:
def render(*args, &block)
if params[:action] == 'edit_associated'
@column = active_scaffold_config.columns[params[:child_association]]
parent_model_name = params[:parent_controller].classify.singularize
@parent_record ||= parent_model_name.constantize.find(params[:id])
child_model_name = params[:child_association].classify.singularize
@record ||= child_model_name.classify.constantize.new
end
#{"association"=>"sub_tdns", "parent_scaffold"=>"tdns", "tdn_id"=>"11",
# "adapter"=>"_list_inline_adapter", "controller"=>"sub_tdns", "action"=>"new"}
if params[:action] == 'new' && params[:association] == 'sub_tdns' && params[:tdn_id]
#No idea why I this is not automatic? Need to get the tdn_id for subTdn
@record.tdn_id = params[:tdn_id]
end
if self.class.uses_active_scaffold? && params[:adapter] && @rendering_adapter.nil? && request.xhr?
@rendering_adapter = true # recursion control
# if we need an adapter, then we render the actual stuff to a string and insert it into the adapter template
opts = args.any? ? args.first : {}
render :partial => params[:adapter][1..-1],
:locals => {:payload => render_to_string(opts.merge(:layout => false), &block).html_safe}, # rubocop:disable Rails/OutputSafety
:use_full_path => true, :layout => false, :content_type => :html
@rendering_adapter = nil # recursion control
else
super(*args, &block)
end
end
end
Hi Sergio,
Sorry for the confusion with so many posts.
Ideally, if you have a demo/test application I could modify it to reproduce the issues I am having, so you are solving a general issue to help everyone.
I will do some more testing with the def do_edit_associated and see what I find.
If a parent has many children, step-children, and foster-children, and we want to edit the parent (family), would the subform action be needed on the parent, or only the children, step-chilren, and foster-children?
I would also like to help update the wiki with some more examples of what I have found works for certain use cases.
Thanks for all you provide to the community!!
Dennis
Hi Dennis
In your example, if I'm right, it would be needed in the three models,
parent, and the children, step-chilren, and foster-children .
I have tested it with 2 models, parent has many children:
* If both controllers have subform action then it works.
* If children controller has the subform action, but the parent doesn't, then it renders as subform, but clicking on create another fails.
* If parent controller has the subform action, but the children doesn't, then the association is rendered as checkbox list (as form_ui :select) instead of subform. It's the same if no controller has the subform action.
Regards
> > ted .js.erb (Duration: 2.9ms | Allocations: 1960)