I'm trying to work with the variable action in a model in rails, but it generates this error:
Any ideas ??? in advance, thanks !!!
Deputy controller
class MensajesController < ApplicationController
before_action :set_mensaje, only: [:show, :alcance, :edit, :update, :grupo, :destroy]
before_action :authenticate_user!
before_action :cuota_sms
def create
@mensaje = Mensaje.new(mensaje_params) do |mensaje|
mensaje.user = current_user
mensaje.parent_id = params[:parent_id]
end
respond_to do |format|
format.js
end
end
def show
end
def alcance
mensaje = {"mensajes_id_in_any"=>[params[:id].to_s]}
@buscar = Contacto.search(mensaje)
@enviado_por = 'xxx'
@contactos = @buscar.result(distinct: true).order("numero")
end
def edit
end
def update
respond_to do |format|
if @mensaje.update(mensaje_params)
format.html { redirect_to '/', notice: 'mensaje editado' }
else
format.html { render :edit }
format.json { render json: @contacto.errors, status: :unprocessable_entity }
end
end
end
def grupo
respond_to do |format|
if @mensaje.update(mensaje_params)
format.html { redirect_to mensaje_path, notice: 'Alcance actualizado' }
else
format.html { render :show }
format.json { render json: @contacto.errors, status: :unprocessable_entity }
end
end
end
def destroy
@mensaje_id = params[:id]
respond_to do |format|
format.js
end
end
private
def set_mensaje
@mensaje = Mensaje.find(params[:id])
end
def mensaje_params
params.require(:mensaje).permit(:texto, :cantidad_contactos, grupo_ids:[], mensaje_ids:[])
end
end
Attached full code of the model
class Mensaje < ActiveRecord::Base
has_and_belongs_to_many :grupos
has_and_belongs_to_many :contactos
after_update :actualizar_mensaje
self.per_page = 20
belongs_to :user
validates :texto,
presence: { message: "en blanco" },
length: { maximum: 160, :message => "muy largo" }
counter_culture :user
end
private
def actualizar_mensaje
puts ''''''''''''''''''''''''''''''''''''''''''''
puts ''''''''''''''''''''''''''''''''''''''''''''
puts "accion: #{params[:action]}"
puts ''''''''''''''''''''''''''''''''''''''''''''
puts ''''''''''''''''''''''''''''''''''''''''''''
contador = 0
vector = []
gm = GruposMensaje.where(mensaje_id: self.id)
gm.each do |gml|
grp = Grupo.find(gml.grupo_id)
cg = ContactosGrupo.where(grupo_id: grp.id)
cg.each do |cgl|
contacto = Contacto.find(cgl.contacto_id)
vector[contador] = contacto.id
contador += 1
end
end
vector = vector.sort.uniq
total = vector.length
mensaje = Mensaje.find(self.id)
mensaje.update_columns(cantidad_contactos: total)
mensaje.contactos.delete_all
vector.each do |id_contacto|
ContactosMensaje.create( { "mensaje_id" => self.id, "contacto_id" => id_contacto })
end
end
Basically what I want is that when you call the update action on the controller, the after_update: update_message will be executed, but when you invoke the group action, do not run after_update: update_message.