[RUBY] gem active_hash À propos du hachage actif

Ce que j'ai fait la nuit dernière Parce que l'introduction du hachage actif a réussi Mémorandum

je veux dire J'étais impatient car je ne trouvais pas la description de la migration depuis la source principale ...

environnement

ruby 2.5 rails 5.2.4.3 devise 4.7.2 active_hash 3.1.0

référence

zilkey/active_hash: collection_select

Il est utilisé pour stocker un peu de données.

Je souhaite utiliser plusieurs endroits avec une seule application, comme la sélection de données pour les préfectures, Mais pas avant d'utiliser DB. Hum ... Je le recommande parfois. Peut-il être utilisé dans les catégories? ?? ↑ La catégorie était un joyau appelé ascendance. https://github.com/stefankroes/ancestry

Introduction facile

gemme

Gemfile


gem 'active_hash'

L'habituel

bundle install

ajout du modèle OTZ qui était facile jusqu'à présent

☓ rails g modèle Nom du modèle ← No. Cette fois, ce sont les données des préfectures

models/prefecture.rb


class Prefecture < ActiveHash::Base
  self.data = [
      {id: 1, name: 'Hokkaido'}, {id: 2, name: 'Préfecture d'Aomori'}, {id: 3, name: 'Préfecture d'Iwate'},
      {id: 4, name: 'Préfecture de Miyagi'}, {id: 5, name: 'Akita'}, {id: 6, name: 'Préfecture de Yamagata'},
      {id: 7, name: 'Préfecture de Fukushima'}, {id: 8, name: 'Préfecture d'Ibaraki'}, {id: 9, name: 'Préfecture de Tochigi'},
      {id: 10, name: 'Préfecture de Gunma'}, {id: 11, name: 'Saitama'}, {id: 12, name: 'Préfecture de Chiba'},
      {id: 13, name: 'Tokyo'}, {id: 14, name: 'Préfecture de Kanagawa'}, {id: 15, name: 'Préfecture de Niigata'},
      {id: 16, name: 'Préfecture de Toyama'}, {id: 17, name: 'Préfecture d'Ishikawa'}, {id: 18, name: 'Préfecture de Fukui'},
      {id: 19, name: 'Préfecture de Yamanashi'}, {id: 20, name: 'Préfecture de Nagano'}, {id: 21, name: 'Préfecture de Gifu'},
      {id: 22, name: 'Préfecture de Shizuoka'}, {id: 23, name: 'Préfecture d'Aichi'}, {id: 24, name: 'Préfecture de Mie'},
      {id: 25, name: 'Préfecture de Shiga'}, {id: 26, name: 'Kyoto'}, {id: 27, name: 'Préfecture d'Osaka'},
      {id: 28, name: 'Préfecture de Hyogo'}, {id: 29, name: 'Préfecture de Nara'}, {id: 30, name: 'Préfecture de Wakayama'},
      {id: 31, name: 'Préfecture de Tottori'}, {id: 32, name: 'Préfecture de Shimane'}, {id: 33, name: 'Préfecture d'Okayama'},
      {id: 34, name: 'Préfecture d'Hiroshima'}, {id: 35, name: 'Préfecture de Yamaguchi'}, {id: 36, name: 'Préfecture de Tokushima'},
      {id: 37, name: 'Préfecture de Kagawa'}, {id: 38, name: 'Préfecture d'Ehime'}, {id: 39, name: 'Préfecture de Kochi'},
      {id: 40, name: 'Préfecture de Fukuoka'}, {id: 41, name: 'Préfecture de Saga'}, {id: 42, name: 'Préfecture de Nagasaki'},
      {id: 43, name: 'Préfecture de Kumamoto'}, {id: 44, name: 'Préfecture d'Oita'}, {id: 45, name: 'Préfecture de Miyazaki'},
      {id: 46, name: 'Préfecture de Kagoshima'}, {id: 47, name: 'Préfecture d'Okinawa'}
  ]
end

model postscript Comme base de la source principale

Ce modèle d'adresse de temps adresse d'association plusieurs ← → 1 préfecture

models/address.rb


  extend ActiveHash::Associations::ActiveRecordExtensions
  belongs_to :prefecture

Modifier les informations de migration à partir d'ici ...

Modifier le fichier migrationFile correspondant Cette fois

migrate/*****_create_addresses.rb


t.integer :prefecture_id,        null: false, default: nil

null ~ est votre choix ♪ Après réécriture, les rails habituels db: migrate Réécrire également les paramètres forts ^^ Peut-être que registrations_controller.rb De: Seulement la partie préfecture. Je l'ai fait: prefecture_id.

registrations_controller.rb


  protected

  def address_params
    params.require(:address).permit(:family_name_kanji,:first_name_kanji,:family_name_kana,:first_name_kana,:post_number,:prefecture_id,:city,:block_number,:apartment_name,:phone_number)
  end

voir le changement

La classe était gênante.

= f.collection_select :prefecture_id,Prefecture.all,:id,:name,{prompt:"--"},{class:"inputDefault"}

C'est ↓.

<select class="inputDefault" name="address[prefecture_id]" id="address_prefecture_id"><option value="">--</option>
<option value="">--</option>
<option value="1">Hokkaido</option>
<option value="2">Préfecture d'Aomori</option>
<option value="3">Préfecture d'Iwate</option>
・ ・ ・ ・ ・ ・ ・
<option value="47">Préfecture de Fukuoka</option></select>
= f.collection_select :Nom de colonne,Données à enregistrer,Données à afficher,Premières données(sélectionné est aussi ici),Cette classe de temps

Peut-être que c'est fini. Je n'avais aucune idée de changer la colonne de migration de t.string: prefecture à ce qui précède, donc j'ai essayé de changer les données d'enregistrement de collection_select en: name ^^; Quelques heures TT en un rien de temps

Recommended Posts

gem active_hash À propos du hachage actif
[Rails] À propos du hachage actif
[À propos du double hachage]
À propos de Gem :: ConflictError (activesupport)
À propos de DelegError (Active Storage)
[Rails] Présentation de Active Hash
Les pièges d'Active Hash
[Débutant] À propos du stockage actif
Conception de table (en utilisant Active Hash)
À propos du comportement de ruby Hash # ==
J'ai essayé d'expliquer Active Hash