Utilisation des champs à partir d'un modèle d'association (has_many) avec formtastic dans des rails

StackOverflow https://stackoverflow.com/questions/2195534

Question

J'ai cherché et essayé beaucoup, mais je ne peux pas l'accomplir que je veux .. Alors, voici mon problème.

class Moving < ActiveRecord::Base
  has_many :movingresources, :dependent => :destroy
  has_many :resources, :through => :movingresources
end

class Movingresource < ActiveRecord::Base
  belongs_to :moving
  belongs_to :resource
end

class Resource < ActiveRecord::Base
  has_many :movingresources
  has_many :movings, :through => :movingresources
end

Movingresources contient des champs supplémentaires, comme quantity. Nous travaillons sur les points de vue pour « facture ». Merci à formtastic pour simplifier la chose toute relation en écrivant simplement

<%= form.input :workers, :as => :check_boxes %>

et je reçois une vraie liste de cases à cocher belle. Mais ce que je ne l'ai pas trouvé à ce jour est la suivante: Comment puis-je utiliser les champs supplémentaires de « movingresource », à côté ou sous chaque case à cocher mes champs souhaités de ce modèle

?

ai vu des approches différentes, notamment avec une boucle manuellement à travers un tableau d'objets et de créer les formes appropriées, en utilisant: dans une partie form.inputs, ou non. Mais aucune de ces solutions étaient propres (par exemple travaillé pour la vue d'édition, mais pas pour de nouveau parce que les objets nécessaires ne sont pas construits ou générés et les générer un désordre provoqué).

Je veux connaître vos solutions pour cela!

Était-ce utile?

La solution

D'accord, j'ai raté la révolution de accepts_nested_attributes_for, ce qui explique pourquoi il ne fonctionne vraiment.

Cela m'a fait un grand pas de plus, mais je pense que quelque part je vais encore avoir quelques complications avec mes relations complexes ^ _ ^

class Moving < ActiveRecord::Base
    has_many :movingworkers, :dependent => :destroy
    has_many :workers, :through => :movingworkers
    accepts_nested_attributes_for :movingworkers
end


<% form.inputs :for => :movingworkers do |movingworker| %>
    <%= movingworker.inputs :worker, :quantity %>
<% end %>

Autres conseils

Formtastic de: l'option label_method pourrait aider. Par exemple.

<%= form.input :movingworkers, :label_method => :worker %>

ou

<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>

Si les champs n'existent pas dans la nouvelle vue, vous pouvez tester si elle est nouvelle ( new_record? ) et de présenter un ensemble différent de champs (si vous enveloppez dans une partielle peut une approche tout à fait propre).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top