46 votes

Meilleure approche pour enregistrer les préférences de l'utilisateur?

J'ai vu deux approches différentes pour enregistrer les préférences de l'utilisateur.

APPROCHE 1: Sérialisation et sauvegarde dans l’une des colonnes du tableau USERS

APPROCHE 2: Créer une table séparée PREFERENCES et créer une association has_many de USERS à PREFERENCES.

Laquelle de ces deux approches préféreriez-vous et quels sont les avantages et les inconvénients de l’une par rapport à l’autre?

22voto

Pesto Points 16648

C'est généralement une bonne idée de favoriser la normalisation. La deuxième solution garde vos modèles plus propres, permet une extensibilité facile si de nouvelles préférences sont ajoutées et maintient vos tables non encombrées.

20voto

Turadg Points 3621

J'ai lutté avec cette même question, donc je pensais que je voudrais partager ce que j'ai trouvé dans un "wiki de la communauté" réponse.

La sérialisation dans un seul attribut

Simple les préférences de l'utilisateur de votre application Rails est un blog décrivant comment le faire.

Edit sérialisé de hachage dans un formulaire? décrit comment modifier ce hachage dans un formulaire. Une astuce utile est de rendre le formulaire d' OpenStruct.new(@user.preferences) de hachage pour produire automatiquement des méthodes accesseur pour chaque attribut de hachage.

COLORANT/has_serialized - GitHub permet de traiter ces attributs dans la sérialisé de hachage comme des attributs sur l'utilisateur (nom d'utilisateur) modèle.

Les préférences dans un tableau distinct

Les meilleures pratiques pour stocker les paramètres de l'utilisateur? a quelques conseils. Ci-dessous sont quelques-libs dont deux d'une autre réponse par @sans espoir.

  • rails-paramètres gère un tableau de paires clé/valeur comme une valeur de Hachage stockées dans votre base de données, à l'aide de simples ActiveRecord comme des méthodes pour la manipulation. Vous pouvez stocker n'importe quel type d'objet: les Chaînes de caractères, des nombres, des matrices ou tout objet qui peut être noté que les YAML. (Testé avec Rails 3.1)
  • De préférence-fu est bon pour booléenne simple préférences, utilise une colonne unique pour de multiples préférences.
  • Préférences est plus flexible, utilise une table, quelques belles sucre syntaxique.
  • HasEasy stocke les données dans un tableau vertical, mais vous permet d'ajouter des validations, les pré/post-stockage, traitement, types, etc. (Dernière mise à jour 2008)

Vous pouvez également essayer d'utiliser la métaprogrammation: Pratique Métaprogrammation avec Ruby: Stockage des Préférences

5voto

sma Points 211

Une version améliorée de la première approche peut être fait si vous êtes sur PostgreSQL 9.2/3+ et Rails de 4+. Vous pouvez utiliser store_accessor pour stocker les préférences dans un PostgreSQL hstore colonne avec support pour les validations et d'interrogation.

class User
  store_accessor :preferences, :receive_newsletter

  validates :receive_newsletter, presence: true
end

user.receive_newsletter => 'true'

User.where("preferences->'receive_newsletter' = 'true'")

Voir http://mikecoutermarsh.com/using-hstore-with-rails-4/ pour plus de détails (migrations) et une note spéciale sur la gestion des booléens.

3voto

Rik Heywood Points 9034

Approche 2

Vous pouvez ajouter des préférences sans encombrer la table des utilisateurs

3voto

ideasasylum Points 1640

Il existe quelques plugins Rails pour gérer ce cas d'utilisation:

  • Preference-fu (bon pour les préférences booléennes simples, utilise une colonne unique pour plusieurs préférences)
  • Préférences (plus flexible, utilise un tableau séparé, du bon sucre syntaxique)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X