8
votes

Formtastic Select avec regroupement

MAINTENANT AVEC FORMASTIQUE, j'ai un choix simple:

= grouped_collection_select('', :category_id, top_categories, :children, :name, :id, :name, :include_blank => true)


4 commentaires

Avez-vous eu de la chance avec cela pour que cela fonctionne correctement en formastic?


Pas encore. J'ai soumis un problème pour former des gars de GitHub. Il n'y a pas de couverture spécifique pour les options groupées et une spécification d'échec sera appréciée.


Avez-vous compris cela?


@Michael IRWIN: Non, je suis passé à Simple_Form dans mon prochain projet. DSL est presque identique, mais plus flexible. Github.com/plataformatec/simple_form


3 Réponses :


0
votes

Pourquoi ne pas essayer de construire votre liste d'éléments dans une assistante puis de passer cela dans la balise Select?

Je ne sais pas grand chose à propos de formastic, ou ACTS_AS_TREE, mais si vous rencontrez des problèmes pour le faire fonctionner sur la manière dont vous avez ci-dessus, je pense avoir recours à la construction de vos options avant de les transmettre à votre sélection.


1 commentaires

Cela fonctionne comme j'ai mis à jour ma question. Mais j'utilise un formastic et j'aimerais utiliser la syntaxe.



1
votes

Hey, alors j'essayais de résoudre un problème particulier avec formastic et de découvrir que vous pouvez modifier la requête utilisée pour construire la liste à l'aide de: Find_Options. En regardant le code, j'ai vu que si vous ne spécifiez pas: group_by, la liste des valeurs est finalement réduite à une recherche (: toutes) de l'objet de modèle (dans une méthode appelée Find_Raw_Collection_for_column dans formtastiastic.rb). Les paramètres après: Tous sont l'ensemble des paramètres spécifiés par: Find_Options. Ainsi, vous pouvez appliquer toutes les conditions ou d'autres paramètres que vous utiliseriez normalement dans Rechercher (* args) (voir http://ar.rubyonrails.org/classes/acterecord/base.html#m000333 ). Personnellement, j'ai ajouté ceci à ma déclaration F.Input:

: Find_Options => {: conditions => {: pays_id => @ Business.Country? @ Business.Country.Id: nil}}

En faisant cela, j'ai limité l'instruction SELECT pour la requête à l'ID du comté actuel. Mais vous devriez pouvoir utiliser: groupe de manière similaire pour spécifier qui vous vouliez regrouper dans votre requête, comme celui-ci:

: Find_Options => {: groupe => 'parent.id'}

espère que cela aide.


0 commentaires

16
votes

Si quiconque a le même problème, vous pouvez procéder comme suit: xxx

référence de rails API

Recommandation de Justin French (il mentionne le: Group_by)


8 commentaires

J'ai un problème avec cela qu'il ne sélectionne pas automatiquement la catégorie associée. Avez-vous rencontré le même problème?


Fyi aux autres qui viennent ici via Google: Pour sélectionner automatiquement la catégorie associée, il suffit de passer dans l'identifiant comme 6ème paramètre selon API.RubyonRails.org/classes/actionView/helpers/...


@ Adam21e J'ai essayé d'ajouter le: ID comme 6ème argument, mais en vain. Il sélectionne automatiquement la première option de la liste.


@ ADAM21E J'ai vu que l'option_groups_from_collection n'a pas ajouté sélectionnée = "Sélectionné" pour la sélection automatique, comme la collection groupée Select (). Avez-vous expérimenté la même chose?


@ mak89k option_groups_from_collection_for_select fonctionne pour moi dans une application Rails 3.2 avec formastic 2.2


@ ADAM21E Cochez cette dépendance officielle lien . J'ai confronté ce problème lors de l'utilisation de DSL dans ACTIVE Admin.


@ mak89k Ce lien dit que vous pouvez toujours utiliser des aides réguliers de rails afin que je ne vois pas comment cela s'applique. Le problème peut être que l'ID que vous fournissez n'est pas valide. Vous pouvez vérifier la sortie Standard Rails Helper en faisant cela sur une seule page: <% = option_groups_from_collection_for_select (mastercategory.all,: Catégories,: Nom ,: ID ,: Nom, Catégorie_Id)%>. Cela vous permettra de voir ce qui est envoyé à l'entrée formastic.


BTW, parentcategory.all n'appartient pas à la vue (vérifiez vos principes MVC). Attribuez-le à une variable dans le contrôleur.