Recuperar la (s) base (s) de la (s) base (s) siguiente en el parámetro proporcionado -- ruby campo con ruby-on-rails camp codereview Relacionados El problema

Retrieve next card(s) base on the provided parameter


4
vote

problema

Español

¿Cómo puedo eliminar el 9988776665544334 ?

  def index   if params[:next_cards] # check nil     render json: current_user.next_cards(params[:next_cards].to_i),            status: :ok   else     render json: current_user.cards, status: :ok   end end   

Dentro del user.rb Módulo,

    def next_cards(num_of_cards=nil)     if num_of_cards       cards.next_cards.limit(num_of_cards)     else       cards.next_cards     end   end   

Dentro del card.rb Módulo,

    def self.next_cards     joins(:meta_sm2).merge(MetaSm2.next_cards).order('RANDOM()')   end   

Dentro del [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3] 0 Modelo,

  [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3] 1  
Original en ingles

How can I remove the duplicated params[:next_cards]?

def index   if params[:next_cards] # check nil     render json: current_user.next_cards(params[:next_cards].to_i),            status: :ok   else     render json: current_user.cards, status: :ok   end end 

Inside the user.rb module,

  def next_cards(num_of_cards=nil)     if num_of_cards       cards.next_cards.limit(num_of_cards)     else       cards.next_cards     end   end 

Inside the card.rb module,

  def self.next_cards     joins(:meta_sm2).merge(MetaSm2.next_cards).order('RANDOM()')   end 

Inside the meta_sm2.rb model,

  scope :next_cards, -> { where('next_repetition <= :current_time', current_time: Time.now) } 
     
 
 

Lista de respuestas

4
 
vote
vote
La mejor respuesta
 

OK, en respuesta a la conversación en los comentarios, aquí está mi primer paso sugerido:

    def index     render json: cards, status: :ok   end    private    def cards     if next_cards       current_user.next_cards(next_cards.to_i)     else       current_user.cards     end   end    def next_cards     params[:next_cards]   end   

El problema más amplio aquí es que es que está utilizando esencialmente params[:next_cards] como un interruptor para lo que esencialmente debería ser dos acciones del controlador. Este último es la acción del índice del controlador de tarjetas, y el primero es algo a lo largo de las líneas de user/next_cards/:id . Posiblemente un siguiente controlador de tarjetas. La acción del espectáculo de los cuales podría verse como

rutas.rb:

  resource :next_cards, only: :show   

APLICACIÓN / CONTROLADORES / NEXT_CARDS_CONROLER.RB:

  def show   render json: current_user.next_cards(params[:id]) end   

Los controladores no tienen que tener un mapeo de 1 a 1 con los modelos. De esta manera se aprovecha el enrutamiento de rieles para validar que los params [: id] siempre estarán presentes. Eliminando así la necesidad de un cheque nulo.

Obviamente, esto podría tomar más tiempo a medida que sus puntos de vista deberán actualizarse para reflejar la nueva ruta. Si es una aplicación Greenfield, sigue adelante y hazlo ahora mismo. Si es una base de código antigua e hinchada, comience pequeño con el refactor y hágalo en trozos.

 

Ok, in response to the conversation in comments, Here's my suggested first step:

  def index     render json: cards, status: :ok   end    private    def cards     if next_cards       current_user.next_cards(next_cards.to_i)     else       current_user.cards     end   end    def next_cards     params[:next_cards]   end 

the larger issue here though is that you are essentially using params[:next_cards] as a switch for what should essentially be two controller actions. the latter being the index action of the cards controller, and the former being something along the lines of user/next_cards/:id . Possibly a next cards controller. The show action of which could look something like

routes.rb:

resource :next_cards, only: :show 

app/controllers/next_cards_controller.rb:

def show   render json: current_user.next_cards(params[:id]) end 

controllers don't have to have a 1 to 1 mapping with models. This way takes advantage of rails routing to validate that params[:id] will always be present. thereby eliminating the need for a nil check.

Obviously this could take more time as your views will need to be updated to reflect the new route. If it's a greenfield app, go ahead and do it right now. If it's an old, bloated codebase, start small with the refactor and do it in chunks.

 
 
         
         
0
 
vote

El hecho de que está encendido en el parámetro en el 9988776665544335 y los métodos 9988776655544336 lo hacen parecer que uno es redundante para mí. Se ve casi como si pudiera eliminar el condicional de index y simplemente cambiar next_cards ligeramente.

 

The fact that you are switching on the parameter in both the index and the User#next_cards methods makes it look like one is redundant to me. It looks almost like you could remove the conditional from index and just change next_cards slightly.

 
 

Relacionados problema

1  Sistema de eventos de Rails JS  ( Rails js event system ) 
Estoy trabajando en una gema que es relativamente simple. funciona agregando data-controller data-action55544335 Atribuye a la etiqueta del cuerpo y lu...

1  Cómo reducir el número de "Si las declaraciones" jerárquicas "[CERRADO]  ( How to reduce number of hierarchical if statements ) 
cerrado . Esta pregunta necesita detalles o claridad . Actualmente no está aceptando respuestas. ...

1  Rake Tarea para enviar a los usuarios un recordatorio para publicar con condiciones  ( Rake task to send users a reminder to post with conditions ) 
Estoy implementando una característica que recuerda a los usuarios que realicen una publicación por correo electrónico si El usuario ha establecido recorda...

1  Importando archivos de marcas  ( Importing markdown files ) 
Estoy construyendo una aplicación de rieles que, entre otras cosas, importan los archivos de marca de texto como publicaciones de blogs. La idea es que la ver...

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...

2  Prueba de unidad RSPEC para actualizar una propiedad de un modelo  ( Rspec unit test for updating a property of a model ) 
Sé cómo escribir pruebas de RSPEC simples y pruebas de unidad. Solo quiero saber si esto es lo suficientemente bueno o si hay mejoras que pueda hacer. Tengo...

3  Prueba de un controlador API de rieles  ( Testing a rails api controller ) 
Estoy construyendo una API de JSON. Estoy escribiendo mis pruebas de controlador para que comparen el organismo de respuesta al JSON real, estoy generando en ...

4  Convertidor de temperatura que parece violar SRP  ( Temperature converter that seems to violate srp ) 
He escrito esta clase para dos propósitos (creo que solo este hecho muestra que este código viola srp < / a>): convertir el peso de una unidad a otra y para ...

2  PEQUEÑO: configuración regional  ( Small setting locale ) 
Soy nuevo en rieles / Ruby y me gustaría obtener comentarios sobre mi pequeño 99887766655443312 que puede detectar el idioma del visitante. Estoy especialme...

2  Estructura de ruta para múltiples asociaciones en rieles  ( Route structure for multiple associations in rails ) 
Estoy haciendo un sitio en este momento (primer sitio de Rails, aprendiendo como código) y me preocupa que estoy complicando las rutas. Mis asociaciones se ...




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