2017-07-07 8 views
0

je 2 classes, A et Butilisation que le champ d'fields_for avec nested_attributes

class A 
    has_many :bs 
    accepts_nested_attributes_for :bs 
end 

class B 
    belongs_to :a 
end 

B a un champ appelé: groupe et je veux regrouper mes Bs par groupe sous la forme. Fields_for fait 2 choses, il 1) ajoute une portée autour des éléments de formulaire imbriqués et 2) il itère à travers les attributs. Je ne veux que la première partie, la portée imbriquée. Existe-t-il un moyen de limiter l'imbrication pour regrouper manuellement mes objets imbriqués?

Dans le code pseudo est ce que je veux

<%= form_for a do |f| %> 
    <%= scope_for :gs do |g| %> 
     <% f.object.bs.group_by{|x| x.group} do |k,v| %> 
    <h3> Group <%= k %> </h3> 
    <% v.each do |b| %> 
     <%= g.text_field :field1 

...

Y at-il une aide de forme Rails qui permet d'atteindre cela?

Répondre

1

Il n'y a pas d'aide intégrée que je connaisse qui vous permettra de faire cela, mais il est possible de bidouiller une solution en utilisant seulement fields_for. L'astuce est d'avoir un bloc fields_for séparé pour chaque groupe:

<% f.object.bs.group_by(&:group).each do |k, v| %> 
    <%= f.fields_for "b_groups[]" do |g| %> 
    <!-- ... --> 
    <% end %> 
<% end %> 
+0

i liquidée faire quelque chose comme cela, mais votre réponse efficace la même solution, merci pour la réponse. – user1130176