require 'active_support' module Forcast module Controller module Asociar extend ActiveSupport::Concern included do before_action :raise_error_asociar, only: [:ver_no_asociados_a, :ver_asociado_a, :asociar_a, :desasociar_de] before_action :raise_error_agregar, only: [:agregar_asociado, :quitar_asociado] ## Sobre escribre todos los metodos anteriores.... hay que buscar una forma de arreglarlo ## Solucion por ahora es cambiar el nombre a los metodos before_action :set_model_id_asociar, only: [:ver_asociado_a, :asociar_a, :agregar_asociado, :desasociar_de, :quitar_asociado] end #Collection def ver_no_asociados_a @response = model.no_asociados_a(@modelo + "_id") json_response(@response.select(*params_permitidos_enviar),t("ok")) end #Member def ver_asociado_a @response = @model_id.ver_asociado(@modelo) params_permitidos_enviar = abstract_controller(@modelo).new.send (:params_permitidos_enviar) json_response(@response.select(*params_permitidos_enviar),t("ok")) end def asociar_a raise Application::Error::General.new(t("error_relation_already_taken", param: params[:modelo])) unless @model_id.asociado_a?(@modelo+'_id', @modelo_id) raise Application::Error::General.new(t("error_relation_model_id_doesnt_exist", param: params[:modelo])) unless @model_id.asociado_existe?(@modelo, @modelo_id) @model_id.asociar_a(@modelo+'_id', @modelo_id) json_response(@model_id.attributes.slice(*params_permitidos_enviar),t("ok")) end def desasociar_de @model_id.desasociar_de(@modelo+'_id') json_response(@model_id.attributes.slice(*params_permitidos_enviar),t("ok")) end def agregar_asociado @response = [] @modelo_id.is_a?(Array) ? @modelo_id : @modelo_id = [@modelo_id] @modelo_id.each do |modelo_id| #raise Application::Error::General.new(t("error_relation_already_taken", param: [params[:modelo],modelo_id])) unless @model_id.agregar_asociado_a?(@modelo, modelo_id) raise Application::Error::General.new(t("error_relation_model_id_doesnt_exist", param: [params[:modelo],modelo_id])) unless @model_id.asociado_existe?(@modelo,modelo_id) @model_id.agregar_asociado(@modelo, modelo_id) paso = c_to_m(@modelo).find(modelo_id) params_permitidos_enviar = abstract_controller(@modelo).new.send (:params_permitidos_enviar) @response.push(paso.attributes.slice(*params_permitidos_enviar)) end json_response(@response,t("ok")) end def quitar_asociado @response = [] @modelo_id.is_a?(Array) ? @modelo_id : @modelo_id = [@modelo_id] @modelo_id.each do |modelo_id| #raise Application::Error::General.new(t("error_relation_already_taken", param: [params[:modelo],modelo_id])) unless @model_id.agregar_asociado_a?(@modelo, modelo_id) raise Application::Error::General.new(t("error_relation_model_id_doesnt_exist", param: [params[:modelo],modelo_id])) unless @model_id.asociado_existe?(@modelo,modelo_id) @model_id.quitar_asociado(@modelo, modelo_id) paso = c_to_m(@modelo).find(modelo_id) params_permitidos_enviar = abstract_controller(@modelo).new.send (:params_permitidos_enviar) @response.push(paso.attributes.slice(*params_permitidos_enviar)) end json_response(@response,t("ok")) end def modelo_db n = [] nn = [] model.reflect_on_all_associations(:has_many).each do |x| n = n.push(x.name.to_s.classify) end model.reflect_on_all_associations(:belongs_to).each do |x| nn = nn.push(x.name.to_s.classify) end rep = {model:model.name,belongs_to: nn, has_many: n} json_response(rep,t("ok")) end def raise_error_asociar raise Application::Error::General.new(t("error_relation", param: params[:modelo])) unless comprobar_relacion(:belongs_to, @modelo) raise Application::Error::General.new(t("error_relation_not_permitted", param: params[:modelo])) unless model.params_permitidos_asociar.include?(@modelo+'_id') end def raise_error_agregar raise Application::Error::General.new(t("error_relation", param: params[:modelo])) unless comprobar_relacion(:has_many, @modelo) raise Application::Error::General.new(t("error_relation_not_permitted", param: params[:modelo])) unless model.params_permitidos_agregar.include?(@modelo+'_id') end def set_model_id_asociar @model_id ||= model.find(params[:id]) end end end end