Ruby on Rails – sélection multiple dans f.select

J’ai la boîte de sélection suivante dans mon formulaire:

Related Type:    "Please select"} ) %> 

Je souhaite autoriser l’utilisateur à effectuer plusieurs sélections et à définir la taille de la zone de sélection 5.

Comment faire cela pour le code ci-dessus?

Après votre { :prompt => "Please select"} ajoutez un autre hachage avec les options HTML, par exemple

 <%= f.select(:TYPE, [['Type A', 'Type A'], ['Type B', 'Type B'], ['Type C', 'Type C'], ['Type D', 'Type D'], ['Type E', 'Type E'] ],{ :prompt => "Please select"}, { :multiple => true, :size => 5 } ) %> 

Une fois cela fait, vous pouvez déplacer votre option :prompt (conservez le {} vide pour que les atsortingbuts html ne soient pas traités comme des options Rails).

Vous devez également vous assurer que votre code de contrôleur accepte et gère correctement plusieurs valeurs.

En cas de collecte, essayez

  <%= f.select(:TYPE, Categories.collect {|p| [ p.name, p.id ] }, { :prompt => "Please select"}, { :multiple => true, :size => 5 }) %> 

J’ai un exemple pleinement fonctionnel (y compris la présélection lors de l’édition de l’object) lorsque:

  • Object est l’object considéré
  • similar_ids est la clé des relations et est une ssortingng

Sous la forme:

 form_for(@object) do |f| = f.select :similar_ids, options_from_collection_for_select(Object.all, :id, :name, {:selected => @object.similar_ids.split(';')}), {}, {:multiple => true, :size => 4, :name => 'object[similar_ids][]'} 

Et dans le modèle Object.rb :

 class Object < ActiveRecord::Base before_save :handle_similars def handle_similars self.similar_ids = self.similar_ids.select(&:present?).join(';') # .select(&:present?) is necessary to avoid empty objects to be stored end def similars self.class.find(self.similar_ids.split(';')) end end 

Ces messages m'ont aidé à sortir:

  • Sélectionner la balise avec plusieurs valeurs présélectionnées - Valeurs insérées manuellement dans la firebase database
  • Ruby on Rails: Soumission d'un tableau dans un formulaire

J'espère que cela aide

{: prompt => “Veuillez sélectionner”}, {: multiple => true,: size => 5} {} est important lorsque f.select