[RAILS] Mise en œuvre du menu déroulant dans l'application d'origine avec Active Hash

Aujourd'hui, j'ai mis en place pour ajouter un menu déroulant au nouvel écran d'inscription pour créer mon propre portfolio! C'est une fonctionnalité que je voulais vraiment faire, donc si vous vous sentez heureux quand vous pouvez le faire. Le sentiment quand cela est fait est addictif lol Un aparté est ici. Je voudrais sortir approximativement la procédure de montage.

1, Active Hash introduit

Supposons que vous ayez des données pratiquement inchangées. Il n'est pas nécessaire de le stocker dans la base de données car il s'agit essentiellement de données inchangées. D'un autre côté, si vous écrivez ces données directement dans un fichier de vue, etc., elles ne seront pas lisibles. Active Hash est utile dans de tels cas.

gem 'active_hash'

Tout d'abord, installez ce bijou. (Au bas du Gemfile) Ensuite, effectuez l'installation groupée.

2, création de modèle

Cette fois, nous allons implémenter un menu déroulant sur le nouvel écran d'enregistrement, donc créez un modèle utilisateur comme d'habitude. À partir de là, créez un autre modèle pour le déroulement. Dans mon cas cette fois, je vais créer un modèle fan_history pour retracer l'histoire des fans du sport.

% rails g model fan_history --skip-migration

Ce qui est différent de l'habituel est "--skip-migration". Il s'agit d'une option pour empêcher la génération du fichier de migration lors de la création du fichier modèle. Cette fois, les informations d'historique des fans de l'article ne sont pas enregistrées dans la base de données, il n'est donc pas nécessaire de créer un fichier de migration.

3, ActiveHash::Base ActiveHash :: Base pourra utiliser les mêmes méthodes qu'ActiveRecord. En héritant d'ActiveHash :: Base, les méthodes ActiveRecord peuvent être utilisées pour les objets définis dans le modèle Genre.

fun_history.rb


class FanHistory < ActiveHash::Base
  self.data = [
    { id: 1, name: '--' },
    { id: 2, name: '0~1 an' },
    { id: 3, name: '1~5 années' },
    { id: 4, name: '5~Décennie' },
    { id: 5, name: '10 ans ou plus' }
  ]
end

Je vais l'écrire comme ça. Il y a deux points dont je voudrais que vous soyez conscient, alors veuillez les vérifier. La première est que la première ligne n'est pas ActiveHash :: Base par défaut! Le deuxième point est que la dernière virgule n'est pas écrite sur la ligne avec id: 5! C'est un endroit où je veux que vous fassiez attention lol C'était un petit endroit, mais je ne l'ai pas remarqué et il a un peu stagné. Lol Soit dit en passant, si vous voulez démolir les préfectures, c'est très difficile à décrire, donc je pense qu'il vaut mieux l'obtenir sur le net.

4, éditez le fichier de migration

20201029085540_devise_create_users.rb


      t.string  :nickname,           null: false
      t.string  :email,              null: false, default: ""
      t.string  :encrypted_password, null: false, default: ""
      t.integer :fan_history_id,     null: false  

Il y a deux points à prendre en compte ici également. Le premier est que _id est ajouté pour enregistrer l'id dans la table des utilisateurs! La seconde est que c'était à l'origine une chaîne, mais elle a été changée en entier! C'est un modèle, donc si vous le comprenez, c'est facile à retenir. N'oubliez pas db: migrate

5, associer et valider l'ensemble

user.rb


  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :fan_history
  validates :fan_history_id, numericality: { other_than: 1 }
 

N'oubliez pas d'écrire la première ligne dans must. J'omettrai l'explication de la signification. La deuxième ligne décrit l'association normale avec active_hash. La troisième ligne vous empêche d'enregistrer si le menu déroulant est "-" sélectionné. Si vous écrivez à partir de l'id1 de fan_history.rb, la validation normale est correcte.

6, mise en œuvre du nouvel écran d'enregistrement

new.html.erb


<%= f.collection_select(:fan_history_id, FanHistory.all, :id, :name, {}, {class:"fan_history-select"}) %>

Connectez-vous avec le routage et le contrôleur, puis écrivez cette description dans la vue nouvellement enregistrée. C'est aussi un modèle, donc c'était facile à retenir. La forme est comme ça.

new.html.erb


<%= form.collection_select(Nom de colonne à enregistrer,Tableau d'objets,Éléments stockés dans des colonnes,Nom de colonne affiché dans les options,option,option html) %>

Sommaire

Il y a beaucoup de travail, mais j'ai senti que c'était très facile à retenir en termes de flux. Si c'est la première implémentation, cela prendra du temps et je pense que c'est naturel et qu'une erreur peut se produire, mais c'est relativement difficile à comprendre et je pense qu'il n'y aura pas d'erreur étouffante pendant des heures, donc quand une erreur se produit Vous devriez penser que c'est une erreur à l'intérieur. Afin de ne pas augmenter inutilement le nombre de tables, si les données à traiter sont fondamentalement inchangées, utilisons ActiveHash.

Recommended Posts

Mise en œuvre du menu déroulant dans l'application d'origine avec Active Hash
Lister le contenu des catégories créées avec Active Hash
Placer au milieu avec css
[Rails] Comment appliquer le CSS utilisé dans l'application principale avec Administrer
Remplissez l'écran avec des boutons dans TableLayout
L'application Sinatra avec ActiveRecord est morte dans Passenger 6.0.5
Essayer avec la déclaration de ressources dans l'application Web
Utilisez JDBC Manager avec les paramètres de jdbc.dicon.
Obtenez votre numéro de version dans l'application Android