Je crée une application originale avec Rails. J'ai appliqué Active Hash à cette application. Activé pour sélectionner l'ensemble de données dans ActiveHash au format déroulant. Je vais l'écrire pour que je puisse m'en souvenir même si je l'oublie.
Environnement de développement ruby 2.6.5 Rails 6.0.3.4
Active Hash est l'un des joyaux. Ajoutez au fichier Gem et installez dans le terminal.
Gemfile
gem 'active_hash'
Terminal
bundle install
Ici, le jour est la cible d'Active Hash. Lors de la création d'un modèle - Si le saut de migration est ajouté, le fichier de migration ne sera pas créé. S'il existe d'autres cibles ActiveHash, créez autant de modèles qu'il y a.
Terminal
rails g model day --skip-migration
Héritez ActiveHash dans le modèle. self.data est un tableau qui stocke les données au format de hachage. L'identifiant et le nom (jours) sont liés dans le hachage.
app/models/day.rb
class day < ActiveHash::Base #← Hériter ActiveHash
self.data = [
{ id: 1, name: '--' },
{ id: 2, name: 'Un jour' },
{ id: 3, name: '1 semaine' },
]
end
Ensuite, configurez pour enregistrer l'ID du nombre de jours défini ci-dessus dans la base de données. Prenez l'article comme exemple d'une table associée à ActiveHash.
2020***********_create_articles.rb
class CreateArticles < ActiveRecord::Migration[6.0]
def change
create_table :articles do |t|
t.string :title , null: false
t.text :text , null: false
t.integer :day_id , null: false #Colonne dans laquelle l'ID ActiveHash est stocké
t.timestamps
end
end
end
N'oubliez pas de migrer. Les associations de modèles aussi.
app/model/article
validates :day_id # _Ajouter un identifiant
belongs_to_active_hash :day # _identifiant non requis
Ajoutez day_id au paramètre strong afin qu'il puisse être enregistré.
ruby:article.controller.rb
Exemple:
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
end
private
def article_params
params.require(:article).permit(:title, :text, :day_id)
end
Il peut être affiché au format déroulant par collection_select. Les arguments vont du premier au cinquième.
argument | valeur |
---|---|
Premier argument(Colonne à enregistrer) | day_id |
Deuxième argument(Tableau d'objets) | Day.all |
Troisième argument(Éléments stockés dans des colonnes) | id |
Quatrième argument(Nom de colonne affiché dans les options) | name |
Cinquième argument(option) | {} |
option html | {class:"day-select"} |
<%= f.collection_select(:day_id, Day.all, :id, :name, {}, {class:"day-select"}) %>
c'est tout
Recommended Posts