tutorial the rails learn form_with create book ruby-on-rails

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



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.