Une fonction qui vous permet de sélectionner une préfecture dans le menu déroulant, qui est souvent vu dans les questionnaires. , Vous pouvez avoir la possibilité de publier en utilisant la méthode form_with. Cependant, il est plus facile d'utiliser la préfecture si elle est gérée numériquement sur la table. Afin de pouvoir gérer avec des valeurs numériques, il est nécessaire de préparer au préalable le nom de la préfecture et le numéro qui lui est associé. ActiveHash est une fonction pratique dans de tels cas.
Gem qui vous permet de gérer les données sans les enregistrer dans la base de données en entrant des données qui ne changent fondamentalement pas dans le modèle. Principalement utilisé lorsque vous souhaitez afficher sous forme de menu déroulant dans la vue.
Le document officiel est ici
OK sur la dernière ligne du fichier
Gemfile
gem 'active_hash'
% bundle install
%rails g nom du modèle du modèle--skip-migration
Le nom du modèle doit être tel que les menus déroulants soient regroupés. ex) Baseball, football, tennis ... Lors de la création d'un menu déroulant, le nom du modèle sera «sport».
En ajoutant l'option --skip-migration
, le fichier de migration ne sera pas généré. ActiveHash ne stocke pas dans la base de données, il ne nécessite donc pas de fichier de migration.
Ci-après, le menu déroulant des sports sera décrit à titre d'exemple.
Remplacez le modèle créé dans "3. Génération de modèle" par la description suivante.
app/models/sport.rb
class Sport < ActiveHash::Base
self.data = []
end
En héritant d'ActiveHash :: Base, les méthodes ActiveRecord peuvent être utilisées.
Hachez le contenu du menu déroulant dans le tableau.
app/models/sport.rb
class Sport < ActiveHash::Base
self.data = [
{ id: 1, name: '---' },
{ id: 2, name: 'Baseball' },
{ id: 3, name: 'Soccer' },
{ id: 4, name: 'Tennis' }
]
end
Vous trouverez ci-dessous une explication de l'hypothèse qu'il existe déjà une table pour stocker un autre article.
app/models/post.rb
class Post < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :sport
end
ʻExtend ActiveHash :: Associations :: ActiveRecordExtensions vous permet d'utiliser la méthode
appartient_to_active_hash`.
Il n'est pas nécessaire de décrire les associations dans le modèle sportif.
* Notez que la description est différente de l'association normale </ font>
app/models/post.rb
class Post < ApplicationRecord
extend ActiveHash::Associations::ActiveRecordExtensions
belongs_to_active_hash :sport
validates :sport_id, presence: true #Impossible d'enregistrer le message vide
validates :sport_id, numericality: { other_than: 1 }
#La sélection déroulante est "--Ne peut pas être enregistré lorsque
end
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)
collection_select(:sport_id, Sport.all, :id, :name, {}, {class:"sport-select"})
Nom de la colonne à enregistrer: dans quelle colonne du tableau enregistrer.
Tableau d'objets: Si vous voulez afficher tout le hachage du tableau, vous pouvez utiliser .all
.
Eléments sauvegardés dans la colonne: Dans ʻapp / models / sport.rb, je veux enregistrer la partie qui a été définie comme ʻid:
dans la colonne.
Nom de colonne affiché dans les options: Affiche la partie de ʻapp / models / sport.rbqui a été définie comme
nom:` dans le menu déroulant.
Facultatif: au besoin
option html: nom de classe, etc.
Quoi qu'il en soit, la méthode collection_select a trop d'arguments, ce qui peut prêter à confusion ...
Recommended Posts