Implementación del observador de tareas -- ruby campo con datetime campo con ruby-on-rails campo con active-record camp codereview Relacionados El problema

Task observer implementation


2
vote

problema

Español

Necesito ayuda para limpiar esta pieza de código.

  if is_complete == true   #If there are time stamps get between time stamps   if start_date && end_date     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NOT NULL and DATE(completed_date) between ? and ?", contact_id, start_date, end_date])   else     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NOT NULL", contact_id])   end else   #If there are time stamps get between time stamps   if start_date && end_date     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NULL and DATE(completed_date) between ? and ?", contact_id, start_date, end_date])   else     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NULL", contact_id])   end end   
Original en ingles

I need help cleaning up this piece of code.

if is_complete == true   #If there are time stamps get between time stamps   if start_date && end_date     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NOT NULL and DATE(completed_date) between ? and ?", contact_id, start_date, end_date])   else     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NOT NULL", contact_id])   end else   #If there are time stamps get between time stamps   if start_date && end_date     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NULL and DATE(completed_date) between ? and ?", contact_id, start_date, end_date])   else     tasks = Task.find(:all, :include => [:task_observer, :job, :contact], :conditions => ["contact_id = ? and completed_date IS NULL", contact_id])   end end 
           

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 
  1. Puede reemplazar if is_complete == true con if is_complete
  2. lo único que cambia es :conditions , tasks = ...3 no debe estar dentro de la IF / ONS
  3. El 3er caso es válido: completed_date No puede ser NULL y dentro de un rango determinado al mismo tiempo
  4. Use un condicional para el NOT en completed_date IS (NOT) NULL y uno para el and DATE ... y concate la cadena SQL y luego. Luego lo anidado si / el otro se ha ido.
  5. Los argumentos de consulta adicionales tasks = ...9 y if is_complete0 Depende solo en if is_complete1 , por lo que las distinciones no deben estar en el if is_complete2 Condicional.
 
  1. you can replace if is_complete == true with if is_complete
  2. the only thing that changes is :conditions, tasks = ... should not be inside the if/else
  3. the 3rd case is invalid: completed_date can't be NULL and within a certain range at the same time
  4. use one conditional for the NOT in completed_date IS (NOT) NULL and one for the and DATE ..., and concatenate the sql string then. Then the nested if/else is gone.
  5. the extra query arguments start_date and end_date depend only on start_date && end_date, so the distinctions should not be in the is_completed conditional.
 
 

Relacionados problema

1  Agregue modelos existentes a una relación usando atributos anidados  ( Add existing models to a relation using nested attributes ) 
Necesitaba agregar modelos existentes a una relación con muchas personas mediante atributos anidados, por lo que sobrescribí thumbnails_attributes= : clas...

0  Contando número de mensajes para un buzón durante varios períodos  ( Counting number of messages for a mailbox over several periods ) 
La idea es devolver una serie de mensajes recibidos hoy en día, esta semana, este mes. def index @mailboxes = current_user.mailboxes @today, @mon...

5  Una consulta de registro activo condicional  ( A conditional active record query ) 
Tengo una consulta de registro activo condicional que verifica si existe una relación de tipo x ( 99887776655544332 ) donde attribute x3 y attribute y4 En...

4  Selección ActiverCord, modificada por parámetros opcionales  ( Activerecord selection modified by optional parameters ) 
Tengo un método de acción en My Rails Controller que filtra un modelo de ActiveRecord dependiendo de los parámetros de obtención enviados. rubocop se queja...

5  Buscar usuario por primera y / o apellido, de manera eficiente  ( Search for user by first and or last name efficiently ) 
Estoy refactorizando una búsqueda de usuarios que solo se siente sucia. (Usuarios # Búsqueda) Necesito permitir que un param en blanco busque en parcial o s...

1  Copiando CSV a SQL_Table  ( Copying csv to sql table ) 
Escribí el código que lleva CSV y expórtelo a la tabla SQL. Parece esto: output_leftBound()1 Este método creará una tabla basada en la variable de nombr...

3  Semilla una base de datos  ( Seed a database ) 
Estoy buscando consejos / mejores prácticas para evitar hacer un conjunto profundo anidado de IF / 99887766555443333 en Rails. La intención es sembrar una...

3  Consultas de actualización de MySQL Duplicate_key  ( Custom mysql duplicate key update queries ) 
El objetivo es crear una actividad o actualizar su contador si ya está presente. Y para ser súper precisa, el código evita las condiciones de carrera con un ...

0  Diseño de Ruby OO: ¿Cómo manejar el estado inconsistente en una clase mutable?  ( Ruby oo design how to handle inconsistent state in a mutable class ) 
Resumen Me gustaría tener consejos sobre cómo: implementar métodos que se basan en un estado , cuando la instancia es mutable y puede estar en un est...

3  Los parámetros de limpieza antes de pasarlos a un modelo  ( Cleaning parameters before passing them to a model ) 
Estoy escribiendo una API y quiero poder pasar en los atributos de un modelo sin prefijarse con el nombre del modelo. Escribí esta pequeña extensión a (ns ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos