Qual è la convenzione in Rails per eseguire calcoli e visualizzare i risultati?

2

Quindi sto lavorando a un progetto personale su Rails per saperne di più su questo framework, e ho voluto aggiungere una funzionalità in cui l'utente scelga un particolare record dalla vista e dopo aver fatto alcuni calcoli (che coinvolge un array di 80 interi) Io mostro il risultato ... E poiché trovo che sembra brutto nel modo in cui l'ho fatto, mi sono chiesto quale fosse la convenzione per fare questo genere di cose ...

  1. In dettaglio quello che faccio è mostrarti un elenco di record per l'utente, il l'utente seleziona un record e un numero, quindi fa clic sul pulsante "Calcola exp" ...

  • Quindi nel controller controllo se i parametri esistono, se esistono, quindi definisco la matrice e faccio i calcoli in base al numero di input, agli attributi del record e alla matrice (la matrice non cambia mai e potrebbe essere definita come costante di fatto) che definisco nel controller e alla fine assegno il risultato a una variabile di istanza.
  • Infine il risultato viene mostrato nella stessa pagina, solo se esiste la variabile di istanza che contiene il risultato e viene definita sul controller (dopo aver verificato che i parametri esistano).
  • Quindi la mia domanda è se lo sto facendo nel modo giusto (è la mia prima volta che cerco di fare qualcosa di "serio" con i binari e non so se lo sto facendo bene, soprattutto dichiarando una serie di 80 elementi nel controller, non mi piace come appare e non mi sembra giusto.)

        
    posta OiciTrap 25.02.2015 - 04:22
    fonte

    3 risposte

    1

    Questo è ciò che un controller di rotaie convenzionali dovrebbe avere:

    class HeroesController < ApplicationController
      before_filter :authenticate_user!
      before_filter :user_only
    
      def index
        @heroes = current_user.heroes.find_by_level(params[:level])
      end
    end
    

    I controllori dovrebbero mappare alle risorse e il tuo controllore sta restituendo un elenco di eroi. Quindi, HeroesController#index . Tutto il materiale di ricerca va nel modello.

        
    risposta data 02.03.2015 - 19:51
    fonte
    0

    Direi che va bene. Stai usando i modelli di visualizzazione, interagendo con un controller, va tutto bene.

    Potresti prendere in considerazione l'idea di avere un modello e usarlo per i dati statici. I modelli saranno normalmente oggetti "Active Record" supportati dal database, ma non devono esserlo, possono anche essere usati per contenere il tipo di dati che hai.

        
    risposta data 02.03.2015 - 15:08
    fonte
    0

    Questo calcolo è Business Logic e dovrebbe andare nel livello di dominio della tua applicazione, cioè i tuoi modelli.

    Il controller è il posto sbagliato per questa logica perché dovrebbe essere piuttosto stupido. Sa cosa fare (calcola un valore) ma non il motivo per cui accade o i dettagli nitidi di come avviene (l'algoritmo per il calcolo).

    Un modello di visualizzazione dovrebbe semplicemente massaggiare il modello di dominio in qualcosa di più appetibile alla vista, ma anche questo dovrebbe essere privo di logica aziendale. L'algoritmo del calcolo dovrebbe andare nel modello.

    Lo screenshot del codice che hai pubblicato è troppo piccolo per essere letto, ma sembra che tu abbia un modello Hero . Sposterei la matrice di valori nella classe Hero ed espongo un metodo pubblico che esegue il calcolo e restituisce il risultato.

        
    risposta data 02.03.2015 - 19:13
    fonte

    Leggi altre domande sui tag