Comment gérer les données qui doivent être conservées dans une base de données mais qui ne constituent pas un modèle approprié dans Ruby on Rails?

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

  •  02-07-2019
  •  | 
  •  

Question

Imaginez une application Web écrite en Ruby on Rails. Une partie de l'état de cette application est représentée dans une donnée qui ne correspond pas à la description d'un modèle. Ce descripteur d'état doit être conservé dans la même base de données que les modèles. Ce qui diffère d’un modèle, c’est qu’il ne doit y avoir qu’une instance de sa classe et qu’elle n’a pas de relations avec d’autres classes.

Quelqu'un at-il rencontré quelque chose comme ça?

Était-ce utile?

La solution

D'après votre description, le plug-in rails-settings devrait faire ce dont vous avez besoin.

À partir du fichier Lisez-moi:

& "Paramètres" est un plug-in qui facilite la gestion d'un tableau de paires clé / valeur globale. Pensez-y comme un hachage global stocké dans votre base de données, qui utilise de simples méthodes ActiveRecord pour la manipulation. Gardez une trace de tout paramètre global que vous ne voulez pas coder en dur dans votre application rails. Vous pouvez stocker n'importe quel type d'objet. Chaînes, nombres, tableaux ou tout objet. & ";

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

Autres conseils

Si ce sont des données et que cela se trouve dans la base de données, cela fait partie du modèle.

Ce n'est pas vraiment un problème de RoR; c'est un problème général de conception d'OO.

Si c’était moi, je trouverais probablement un moyen de conceptualiser les données en tant que modèle, puis de le transformer en singleton avec une méthode factory et un constructeur privé.

Sinon, vous pourriez considérer cela comme une forme de journalisation. Dans ce cas, vous n’auriez qu’une classe Logger (également un singleton) qui lit / écrit directement la base de données et qui est appelée au début et à la fin de chaque requête.

Dans Rails, si les données sont dans la base de données, elles le sont dans un modèle. Dans ce cas, le modèle peut s'appeler & "Configuration &", Mais il est toujours mappé sur une classe ActiveRecord de votre système Rails.

Si ces données sont réellement statiques, vous n’avez peut-être pas besoin de la base de données. Vous pouvez utiliser (à titre d'exemple) une variable dans votre contrôleur d'application:

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

Un certain nombre d'approches peuvent être utilisées pour instancier des données à utiliser dans une application Rails.

Je ne suis pas sûr de comprendre pourquoi vous dites que cela ne rentre pas dans un modèle Rails.

S'il ne s'agit que d'une structure de données complexe, enregistrez simplement un tas de code Ruby dans un champ de texte de la base de données: -)

Si, par exemple, vous souhaitez enregistrer un hachage complexe imbriqué, attribuez les éléments suivants à votre champ de texte 'data':

ComplexThing.data = complex_hash.inspect

Lorsque vous souhaitez le relire, il vous suffit de

complex_hash = eval ComplexThing.data

Permettez-moi de signaler deux autres points concernant cette solution:

  • Si votre structure de données n'est pas une classe Ruby standard, une simple inspection peut ne pas le faire. Si vous voyez # & Lt; MyClass: 0x4066e3c & Gt; n'importe où, quelque chose n'est pas sérialisé correctement.
  • Ceci est une implémentation naïve. Si vous risquez d’avoir des données unicode ou si vous enregistrez vraiment beaucoup de classes personnalisées, vous pouvez consulter de véritables solutions de triage.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top