[RUBY] Comment créer plusieurs menus déroulants avec ActiveHash

【Aperçu】

1. Conclusion </ b>

2. Qu'est-ce qu'ActiveHash </ b>

3. Comment utiliser </ b>

4. Supplément </ b>

  1. Conclusion

Créez plusieurs modèles et répertoriez-les tous dans db / migrate!


2. Qu'est-ce que Active Hash

ActiveHash est un gemme qui peut gérer des données en écrivant des données inchangées dans un fichier modèle sans les enregistrer dans la base de données une par une </ b>!


3. Comment utiliser

La méthode d'introduction d'ActiveHash est la même que celle des autres gemmes, je vais donc l'omettre! Préparez également un tableau que vous souhaitez refléter.

console


%rails g model abcdefghi --skip-migration

Je vais le décrire! La raison de sauter est qu'il n'est pas nécessaire de migrer vers DB (créer une table)!

Puis

model


 class Abcdefghi <ApplicationRecord

Parce que c'est Réécrivons ApplicationRecord en ActiveHash :: Base </ b>! Vous pouvez également utiliser les méthodes ApplicationRecord en héritant d'ActiveHash :: Base! (ActiveHash :: Base peut utiliser des méthodes similaires d'ApplicationRecord)

model


 class Abcdefghi <ActiveHash::Base
self.data = [
   { id: 1, name: '--' },
   { id: 2, name: 'A' },
   { id: 3, name: 'B' },
   { id: 4, name: 'C' },
   { id: 5, name: 'D' },
   { id: 6, name: 'E' },
   { id: 7, name: 'F' },
   { id: 8, name: 'G' },
   { id: 9, name: 'H' },
   { id: 10, name: 'I' }
 ]

Comme si vous créiez une table avec self.data, utilisez le hachage au format tableau. Le contenu qui est extrait de la base de données vers le modèle est exactement comme ceci.

"{Id: 1, name: '-'}" est quelque chose que vous voyez souvent lors de l'affichage.

Répétez ceci depuis le début de 3. autant de fois que vous le souhaitez pour créer un menu déroulant!

db/migrate/20******


 class Create****(Nom de table correspondant) <ActiveRecord::Migration[6.0]
 def change
   create_table :*****(Nom de table correspondant)  do |t|
     t.integer    :abcdeghi_id     , null: false
     t.timestamps
    end
  end
 end

ça ira!

La raison de l'utilisation de _id est d'apporter l'id du modèle à la table que vous souhaitez enregistrer.

Le reste est comme d'habitude

console


% rails db:migrate

Tout ce que vous avez à faire est OK!

Cependant, ce à quoi je veux faire attention ici, c'est C'est une association. Pour le moment, la classe Abcdefghi <ActiveHash :: Base a une structure comme une table DB, il est donc nécessaire de décrire l'association.

models/****.rb


class (Nom de table correspondant)  < ApplicationRecord
  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to_active_hash :abcdeghi
end

S'il vous plaît!


4. Supplément

model/****.rb


class ****(Nom de table correspondant)< ApplicationRecord
validates :abcdefghi_id, numericality: { other_than: 1 }

En écrivant "{id: 1, nom: '-'}" Vous pouvez écrire la validation que sauf "-" peut être sauvegardé </ b>! Cela signifie que les nombres au-dessus de id: 1 seront reflétés!


Recommended Posts