2009-11-23 6 views
2

J'ai un modèle avec beaucoup d'enfants (sélections). J'ai besoin d'afficher les enfants en utilisant des champs mais je veux vraiment les regrouper en fonction d'un attribut sur chaque sélection en utilisant group_by.Comment utiliser group_by avec fields_for dans rails?

Actuellement, je suis en utilisant

accepts_nested_attributes_for :selections, :allow_destroy => true 

Alors ma forme ressemble un peu à ceci:

<% form_for @match do |form| %> 
    <% form.fields_for :selections do |child_form| %> 
    <%= child_form.object.first_name %> 
    <%= child_form.check_box '_delete' %> 
    <%= child_form.label '_delete', 'Remove' %> 
    <% end %> 
    <%= form.submit %> 
<% end %> 

Pas tout à fait sûr de savoir comment je pouvais regrouper les sélections à l'aide: group_by. Aucun conseil?

Répondre

2

La question est un peu vague. Mon interprétation est que vous voulez regrouper des sélections similaires par attribut telles qu'elles apparaissent dans le formulaire. Un peu comme ceci: forme

  • pour résultat
    • forme de sélections
      • champs pour la sélection d'attribut A
      • champs de sélection avec attribut A
      • champs de sélection avec attribut A
      • champs pour Sélection avec attribut B
      • champs de sélection avec l'attribut B
      • champs de sélection avec attribut C
      • etc.

L'opérateur group_by n'est pas ce que vous voulez. Cela condense toutes les sélections répondant aux critères à une seule entrée.

La meilleure option serait d'utiliser l'option de commande lors du remplissage de la liste pour la sélection. Peut-être même travailler mieux pour vous de spécifier cet ordre dans l'association. Cela fera ce que vous voulez sans changer votre forme.

has_many :selections, :order => "attribute" 

Cependant, toutes les requêtes de sélection seront classées par attributs. Si c'est un problème, vous pouvez ajouter une deuxième relation has_many pour les sélections.

has_many :selections 
has_many :grouped_selections, :class_name => "selection", :order => "attribute" 

accepts_nested_attributes_for :selections, :grouped_selections :allow_destroy => true 

Et tout ce qui doit changer dans votre formulaire est <% form.fields_for :grouped_selections %>.

0

La seule option que je vois est de les regrouper à travers l'association. Dans votre modèle:

has_many :selections, :order => 'attribute DESC' 

Ce n'est pas la plus propre façon de le faire (ce qui est la façon dont les sélections seront automatiquement commandés dans le reste de votre application, aussi), mais ça va marcher.

Questions connexes