Je crée un échafaudage -
rails g scaffold Contact email:string email_provider:string
mais je veux que le fournisseur d'email soit une liste déroulante (avec gmail/yahoo/msn comme options) et non un champ texte. Comment faire ?
Je crée un échafaudage -
rails g scaffold Contact email:string email_provider:string
mais je veux que le fournisseur d'email soit une liste déroulante (avec gmail/yahoo/msn comme options) et non un champ texte. Comment faire ?
Vous pouvez consulter la documentation Rails . Quoi qu'il en soit, dans votre formulaire :
<%= f.collection_select :provider_id, Provider.order(:name),:id,:name, include_blank: true %>
Comme vous pouvez le deviner, vous devez prédéfinir les fournisseurs d'email dans un autre modèle - Provider
Il est donc important de savoir où les sélectionner.
Vous créez la collection dans la base de données Contact
contrôleur -
app/controllers/contacts_controller.erb
Ajout
@providers = Provider.all.by_name
aux méthodes de création et d'édition, en utilisant une portée pour l'élément by_name
dans le Provider
modèle - app/models/provider.rb
- pour le classement par nom
scope by_name order(:name)
Ensuite, dans la vue - app/views/contacts/_form.html.erb
- vous utilisez
<%= f.collection_select :provider_id, @providers, :id, :name, include_blank: true %>
Pour les formulaires rails, je vous recommande aussi fortement de regarder un constructeur de formulaire comme simple_form - https://github.com/plataformatec/simple_form - qui se chargera de toutes les tâches lourdes.
Il s'agit d'un long chemin, mais si vous ne l'avez pas encore mis en œuvre, vous pouvez créer vos modèles de cette manière. La méthode ci-dessous décrit la modification d'une base de données existante.
1) Créer un nouveau modèle pour les fournisseurs de courrier électronique :$ rails g model provider name
2) Cela créera votre modèle avec une chaîne de noms et des horodatages. Il crée également la migration que nous devons ajouter au schéma :$ rake db:migrate
3) Ajouter une migration pour ajouter l'identifiant des fournisseurs dans le contact :$ rails g migration AddProviderRefToContacts provider:references
4) Examiner le fichier de migration pour vérifier qu'il est correct, et le migrer également :$ rake db:migrate
5) Ok, maintenant que nous avons un provider_id, nous n'avons plus besoin de la chaîne email_provider d'origine :$ rails g migration RemoveEmailProviderFromContacts
6) Dans le fichier de migration, ajoutez le changement qui ressemblera à quelque chose comme :
class RemoveEmailProviderFromContacts < ActiveRecord::Migration
def change
remove_column :contacts, :email_provider
end
end
7) Une fois que cela est fait, migrer le changement :$ rake db:migrate
8) Profitons-en pour mettre à jour nos modèles :
Contact : belongs_to :provider
Prestataire : has_many :contacts
9) Ensuite, nous mettons en place la logique du menu déroulant dans la partie _form.html.erb des vues :
<div class="field">
<%= f.label :provider %><br>
<%= f.collection_select :provider_id, Provider.all, :id, :name %>
</div>
10) Enfin, nous devons ajouter les proviseurs eux-mêmes. Une façon de le faire serait d'utiliser le fichier de semences :
Provider.destroy_all
gmail = Provider.create!(name: "gmail")
yahoo = Provider.create!(name: "yahoo")
msn = Provider.create!(name: "msn")
$ rake db:seed
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.