Come posso gestire i dati che devono essere persistenti in un database, ma non è un modello corretto, in Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/114192

  •  02-07-2019
  •  | 
  •  

Domanda

Immagina un'applicazione web scritta in Ruby on Rails. Parte dello stato di tale applicazione è rappresentata in un dato che non corrisponde alla descrizione di un modello. Questo descrittore di stato deve essere mantenuto nello stesso database dei modelli. Dove differisce da un modello è che deve esserci solo un'istanza della sua classe e non ha relazioni con altre classi.

Qualcuno ha mai incontrato qualcosa del genere?

È stato utile?

Soluzione

Dalla tua descrizione penso che il plugin rails-settings dovrebbe fare quello che ti serve.

Dal file Leggimi:

" Settings è un plugin che semplifica la gestione di una tabella di chiavi globali, coppie di valori. Pensalo come un hash globale archiviato nel tuo database, che utilizza semplici metodi ActiveRecord come manipolazione. Tieni traccia di qualsiasi impostazione globale che non desideri codificare nell'applicazione Rails. È possibile memorizzare qualsiasi tipo di oggetto. Stringhe, numeri, matrici o qualsiasi oggetto. & Quot;

http://github.com/Squeegy/rails-settings/tree/master

Altri suggerimenti

Se sono dati ed è presente nel database, fa parte del modello.

Questo non è davvero un problema RoR; è un problema generale di progettazione OO.

Se fossi in me, probabilmente troverei un modo per concettualizzare i dati come modello e poi renderlo un singleton con un metodo factory e un costruttore privato.

In alternativa, potresti considerarlo una forma di registrazione. In tal caso, avresti solo una classe Logger (anche una singleton) che legge / scrive direttamente il database e viene invocata all'inizio e alla fine di ogni richiesta.

In Rails, se i dati sono nel database, si trovano in un modello. In questo caso il modello può essere chiamato & Quot; Configurazione & Quot ;, ma è ancora mappato su una classe ActiveRecord nel sistema Rails.

Se questi dati sono veramente statici, potrebbe non essere necessario il database. È possibile utilizzare (come esempio) una variabile nel controller dell'applicazione:

class ApplicationController < ActionController::Base
  helper :all 
  @data = "YOUR DATA HERE"   
end

Esistono diversi approcci che possono essere utilizzati per creare un'istanza dei dati da utilizzare in un'applicazione Rails.

Non sono sicuro di capire perché dici che non può stare in un modello Rails.

Se è solo una struttura di dati complessa, basta salvare un sacco di codice Ruby in un campo di testo nel database :-)

Se ad esempio hai un hash nidificato complesso che desideri salvare, assegna quanto segue al campo di testo "dati":

ComplexThing.data = complex_hash.inspect

Quando vuoi rileggerlo, semplicemente

complex_hash = eval ComplexThing.data

Vorrei sottolineare altre 2 cose su questa soluzione:

  • Se la struttura dei dati non è una classe standard di Ruby, una semplice ispezione potrebbe non eseguirla. Se vedi # & Lt; MyClass: 0x4066e3c & Gt; ovunque, qualcosa non viene serializzato correttamente.
  • Questa è un'implementazione ingenua. Potresti voler provare soluzioni di marshalling reali se rischi di avere dati unicode o se stai davvero salvando molte classi personalizzate.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top