Question

J'ai une forme dans mon application Rails qui utilise un FormBuilder personnalisé pour me donner quelques balises de champs personnalisés

<% form_for :staff_member, @staff_member, :builder => MyFormBuilder do |f| %>
[...]
    <%= render :partial => "staff_members/forms/personal_details", :locals => {:f => f, :skill_groups => @skill_groups, :staff_member => @staff_member} %>  
[...]
<% end %>

Maintenant, cette partie se trouve dans une zone de la forme qui obtient remplace par un rappel AJAX. Ce que je finis par faire du contrôleur en réponse à la requête AJAX est:

render :partial => "staff_members/forms/personal_details", :locals => {:skill_groups => @skill_groups, :staff_member => @staff_member}

Cependant, si je fais ça alors les pauses de forme, comme l'objet FormBuilder je dans le form_for n'est plus disponible. Est-il possible pour moi d'utiliser mon habitude FormBuilder objet à l'intérieur d'une occasion partielle pour un rappel AJAX?

Était-ce utile?

La solution

Utilisez l'intérieur de votre partie fields_for. Il effectue une tâche similaire, mais sans envelopper les balises de formulaire. Voir l'API docs .

Autres conseils

que diriez-vous?

  @template.with_output_buffer do
    @template.form_for @model_object do |f|
      f.fields_for :some_nested_attributes do |ff|
        render :partial => 'nested_attributes', :object => @model_object, :locals => {:form => ff}
      end
    end
  end

ce serait particulièrement utile est que vous devez utiliser le fields_for imbriquée dans la partie

Vous pouvez instancier une nouvelle instance de votre générateur de formulaire dans le contrôleur, mais il se sent en quelque sorte moche pour moi:

# in the controller
render :partial => {
  :f => MyFormBuilder.new(:staff_member, @staff_member, template),
  :skill_groups => @skill_groups,
  :staff_member => @staff_member
}

Vous pouvez également être côté client, vous pouvez déplacer plus de la logique de mise à jour qui ne vous demandera pas à vous soucier de quoi que ce soit rendu. Vous pouvez simplement mettre à jour les valeurs via JS. Je ne sais pas si cela fonctionne pour votre projet bien.

Peut-être que je suis un peu en retard dans le jeu ici, et peut-être que je ne comprends pas bien la question, mais ApplicationHelper.rb je pense que vous pouvez simplement ajouter la ligne:

ActionView::Base.default_form_builder = MyFormBuilder

Vous pouvez soumettre au sein de votre ajax appeler le contenu de f.object_name (il est travaille également avec partials) et l'utiliser pour rendre les balises définies dans http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html passant comme premier argument.

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