ruby on rails - the - Registrar las actividades del usuario en ROR
the ruby on rails tutorial (6)
Creo que debería configurar la función del modelo donde after_save
la acción como after_save
, after update
y todo, si su modelo es Transacción para los campos de la tabla de registros puede ser
user_id,
model_name,
action,
ip_address,
session_id,
params
Tengo una aplicación donde hay dos tipos de usuarios actualmente, administrador y proveedor, y quiero registrar sus actividades como
"TestAdmin" viewed transaction
"TestAdmin" added a new vendor
"TestAdmin" edited a Transaction
"TestVendor" added a new Transaction
"TestAdmin" approved Transaction
"TestAdmin" rejected Transaction
etc...
donde "TestAdmin" es un administrador y "TestVendor" es un proveedor
Pero no estoy seguro de qué enfoque debo seguir
Estoy pensando en esto
Adición de una tabla de actividad en DB con los siguientes campos
user_id
browser
session_id
ip_address
action
params
y llama
before_filter :record_activity
grabar todas las actividades
pero no estoy seguro de cómo crear mensajes como el de arriba
También quiero saber si ocurre algún error y cuándo y por qué, por lo tanto, tomo los campos del navegador para averiguar si el código no funciona en IE, etc., pero este es solo un campo de seguimiento de errores.
Por favor, ayuda y guía de alguna manera agradable para lograr esto.
Gracias
Esta es una excelente gema para el registro de "actividades" ... https://github.com/pokonski/public_activity
Hay un par de complementos en los carriles para implementar este tipo de funcionalidad a nivel de modelo. Utilicé acts_as_audited que cumplía con mi requisito.
Tengo que saber acerca de un record_activities más, pero no sé más sobre eso. Espero que te pueda ayudar!
Le sugiero que tenga estos campos en su "Actividad" DB:
model = name of the model ex. "Vendor", "Transaction"
user_id = id of user
belongsTo = id of user that own the action/created the action etc..
action = name of the action
y en tu "Modelo de Actividad" agrega una función
log_activity(model, user_id, belongsTo, action)
log = Activity.new
log.model = model
log.user_id = user_id
log.belongsTo = belongsTo
log.action = action
log.save
end
then in you other models that you want to log add callbacks like:
before_create :log
before_update :log
before_destroy :log
def log
Activity.log_activity(self.class, self.user_id, self.belongsTo, self.action)
# assuming you have this fields on you forms
end
Ok esto es lo que hice ...
Primero crea una tabla
create_table "activity_logs", :force => true do |t|
t.string "user_id"
t.string "browser"
t.string "ip_address"
t.string "controller"
t.string "action"
t.string "params"
t.string "note"
t.datetime "created_at"
t.datetime "updated_at"
end
Función creada en el controlador de la aplicación.
def record_activity(note)
@activity = Activity_Log.new
@activity.user = current_user
@activity.note = note
@activity.browser = request.env[''HTTP_USER_AGENT'']
@activity.ip_address = request.env[''REMOTE_ADDR'']
@activity.controller = controller_name
@activity.action = action_name
@activity.params = params.inspect
@activity.save
end
luego llame a la función anterior desde cualquier controlador necesario como este ...
class AccountsController < ApplicationController
load_and_authorize_resource
# POST /accounts
# POST /accounts.json
def create
@account = Account.new(params[:account])
respond_to do |format|
if @account.save
record_activity("Created new account") #This will call application controller record_activity
format.js { head :ok }
else
format.js { render json: @account.errors, :error => true, :success => false }
end
end
end
De ahí el problema resuelto ......
Gracias a todos por toda su ayuda ....
Tengo que decir que la respuesta de @Anil D obviamente está acoplada. Está bien para proyectos pequeños, pero causará problemas graves (desarrollo, depuración, mantenimiento de problemas) a medida que sus proyectos crezcan cada vez más.
Prefiero ser auditado: (https://github.com/collectiveidea/audited), que es una solución simple y limpia dirigida únicamente a las actividades del usuario. Es compatible con Rails3 y asociaciones.