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.
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.
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.
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
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.
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) %>
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