Class: Avo::AssociationsController
- Inherits:
-
BaseController
- Object
- ActionController::Base
- BaseApplicationController
- ApplicationController
- BaseController
- Avo::AssociationsController
- Defined in:
- app/controllers/avo/associations_controller.rb
Constant Summary
Constants included from Concerns::FindAssociationField
Concerns::FindAssociationField::ASSOCIATIONS
Instance Method Summary collapse
- #create ⇒ Object
- #create_association ⇒ Object
- #destroy ⇒ Object
- #index ⇒ Object
- #new ⇒ Object
- #show ⇒ Object
Methods inherited from BaseController
#edit, #preview, #search, #update
Methods included from Concerns::SafeCall
Methods included from Concerns::AssociationQueryScope
#association_query_scope, #association_summary?, #build_association_scope_from_params
Methods included from Concerns::FiltersSessionHandler
#fetch_filters, #filters_from_params, #filters_from_session, #filters_session_key, #reset_filters, #save_filters_to_session
Methods inherited from BaseApplicationController
#exception_logger, #turbo_frame_request?
Methods included from Concerns::FindAssociationField
Methods included from Concerns::Breadcrumbs
#add_breadcrumb, #avo_breadcrumbs
Methods included from UrlHelpers
#edit_resource_path, #new_resource_path, #preview_resource_path, #related_resources_path, #resource_attach_path, #resource_detach_path, #resource_path, #resource_view_path, #resources_path
Methods included from ApplicationHelper
#a_button, #a_link, #body_classes, #button_classes, #chart_color, #container_classes, #d, #decode_filter_params, #e, #editor_file_path, #editor_url, #empty_state, #encode_filter_params, #frame_id, #get_model_class, #input_classes, #manual_frame_cookie_name, #manual_frame_remembered?, #mount_path, #number_to_social, #possibly_rails_authentication?, #render_header_menu_items, #render_license_warning, #root_path_without_url, #rtl?, #safe_blob_path, #safe_blob_representation_url, #safe_blob_url, #text_direction, #ui, #wrap_in_modal
Methods included from SummaryChartHelper
Methods included from ResourcesHelper
#field_wrapper, #filter_wrapper, #index_field_wrapper, #item_selector_data_attributes, #record_path, #record_title, #resource_for_record, #resource_grid, #resource_show_path, #resource_table
Methods included from CommonController
#default_url_options, #extra_default_url_options
Methods included from InitializesAvo
#_current_user, #context, #init_app, #load_appearance_settings
Instance Method Details
#create ⇒ Object
84 85 86 87 88 89 90 |
# File 'app/controllers/avo/associations_controller.rb', line 84 def create if create_association create_success_action else create_fail_action end end |
#create_association ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'app/controllers/avo/associations_controller.rb', line 92 def create_association association_name = BaseResource.valid_association_name(@record, association_from_params) if .empty? @record.errors.add(:base, t("avo.choose_an_option")) return false end perform_action_and_record_errors do @record.transaction do .each do || attach_record(association_name, ) end end end end |
#destroy ⇒ Object
109 110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'app/controllers/avo/associations_controller.rb', line 109 def destroy association_name = BaseResource.valid_association_name(@record, @field.for_attribute || params[:related_name]) if through_reflection? join_record.destroy! elsif has_many_reflection? @record.send(association_name).delete @attachment_record else @record.send(:"#{association_name}=", nil) end destroy_success_action end |
#index ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'app/controllers/avo/associations_controller.rb', line 22 def index @parent_resource = @resource.dup @resource = @related_resource @parent_record = @parent_resource.find_record(params[:id], params: params) @parent_resource.hydrate(record: @parent_record) # When array field the records are fetched from the field block, from the parent record or from the resource def records # When other field type, like has_many the @query is directly fetched from the parent record # Don't apply policy on array type since it can return an array of hashes where `.all` and other methods used on policy will fail. @query = if @field.type == "array" @resource.fetch_records(Avo::ExecutionContext.new(target: @field.block, record: @parent_record).handle || @parent_record.try(@field.id)) else association_query_scope( parent_resource: @parent_resource, parent_record: @parent_record, association_name: association_from_params, authorization: @related_authorization, resource: @resource, field_association_name: params[:related_name] ) end super end |
#new ⇒ Object
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'app/controllers/avo/associations_controller.rb', line 55 def new @resource.hydrate(record: @record) if @field.present? && !@field.is_searchable? query = @related_authorization.apply_policy @attachment_class # Add the association scope to the query scope if @field.attach_scope.present? query = Avo::ExecutionContext.new(target: @field.attach_scope, query: query, parent: @record).handle end @options = if attach_using_checkbox_list? (query) else (query) end end @url = Avo::Services::URIService.parse(avo.root_url.to_s) .append_paths("resources", params[:resource_name], params[:id], params[:related_name]) .append_query( { view: @resource&.view&.to_s, for_attribute: @field&.try(:for_attribute) }.compact ) .to_s end |
#show ⇒ Object
47 48 49 50 51 52 53 |
# File 'app/controllers/avo/associations_controller.rb', line 47 def show @parent_resource, @parent_record = @resource, @record @resource, @record = @related_resource, @related_record super end |