2012-11-14 24 views
9

Qual è il modo migliore per gestire un set di dati statici (non dinamico)?set di dati statici delle rotaie

Ad esempio, supponiamo di avere un modello con un insieme di 10 istanze diverse, ognuna delle quali è unica, ma nessuna delle quali cambierà mai per tutta la durata della tua applicazione. Sembra eccessivo creare un modello activerecord e archiviare questi dati nel database, ma sembra brutto creare una classe generica e archiviare questi dati nel codice.

Cosa viene accettato come best practice?


Esempio:

Hai un tasso e utente. Un utente può avere un livello compreso tra 1 e 10, quando il livello cambia, la velocità cambia. La velocità potrebbe avere altre informazioni, quindi archiviarla semplicemente come un attributo sull'utente potrebbe essere più difficile di quanto valga. Avrebbe senso per legarlo ad un tasso o di creare come un metodo sul utente in questo modo:

def rate 
    case self.level 
    when 1: 
    { value: "foo", something: "bar", else: "baz" } 
    when 2: 
    # etc 
    end 
end 

Sembra che nessuna delle soluzioni sono ideali, ma non sono sicuro se c'è qualcosa altro ideale che potrebbe accadere.

risposta

1

Vorrei memorizzare queste informazioni in un file YAML. Si potrebbe utilizzare il RailsConfig gem e creare un file YAML come

level: 
    1: 
    some: value 
    another: value 
    2: 
    some: second value 
    another: second value 

E poi accedere con

rate = 2 
val = Settings.level[rate.to_s].some 

(io non sono del tutto sicuro che con i numeri come chiavi in ​​YAML, forse bisogna sfuggire loro)

0

Io uso costanti in questi casi: le costanti non cambiano dopo la dichiarazione, ma la dichiarazione può essere dinamico:

OS = 
    case RUBY_PLATFORM 
    when /linux/ then :linux 
    when /osx/  then :osx 
    when /windows/ then :windows 
    else    :unknown 

prestazioni dovrebbero essere meglio quando si usano le costanti per i valori statici, perché dovrebbero essere memoized (e perché la staticità dovrebbe essere il loro scopo, quindi probabilmente le implementazioni di Ruby hanno fiducia in questo, ho letto qualcosa sull'implementazione di JRuby e costanti, lo posterò se lo troverò. EDIT L'ho trovato: http://blog.headius.com/2012/09/avoiding-hash-lookups-in-ruby.html).