3

Je ne fais que copier une vieille question de railsforum comme il l'a demandé en mai '09 et la seule réponse est la propre correction inélégante des auteurs. Je me demandais si quelqu'un sait d'une meilleure façon? Sinon, je vais finir par utiliser javascript pour déplacer le champ caché comme il l'a fait.fields_for et jQuery compatibilité accordéon

est ici la question initiale:


Salut à tous! Reconnaissant pour tout bon conseil sur ce sujet:

Est-il possible de surcharger la génération automatique de champs ID cachés de Rails dans les fields_for pour une association has_many? Je voudrais générer le mien afin que je puisse choisir où va la chose.

Voici pourquoi:

Je suis en train de mettre un widget Accordéon jQuery-ui autour d'une forme qui ressemble un peu à ceci:

<div id="diagram_elements_form"> 
    <% diagram_form.fields_for :elements do |element_fields| %> 
     <% link_to "#" do %> 
      <%= element_fields.object.name %> 
     <% end %> 
     <%= render :partial => "edit_element_base", :locals => { :f => element_fields } %> 
    <% end %> 
</div> 

le modèle simplifié, ressemble :

class Diagram < ActiveRecord::Base 
    has_many :elements 
    accepts_nested_attributes_for :elements 
end 

Je pense que j'ai les trucs du modèle/contrôleur juste parce que je peux CRUD au contenu de mon coeur. Mais l'accordéon sort tout vrillé.

le widget jQuery UI/Accordion cherche des html sous forme de:

<div id="accordion"> 
    <a href="#">First header</a> 
    <div>First content</div> 
    <a href="#">Second header</a> 
    <div>Second content</div> 
</div> 

Cela semble être une chose facile à réaliser avec des rails, mais je suis vraiment étouffait. Les onglets apparaissent mais sont biaisés, et finalement j'ai réalisé que c'est à cause du hidden_field que les rails ajoute automatiquement pour chaque objet dans les fields_for. Qu'est-ce que je le vent avec ressemble à ceci:

<div id="accordion"> 
    <input type="hidden" name="...id" value="2" /> 
    <a href="#">First header</a> 
    <div>First content</div> 
    <input type="hidden" name="...id" value="3" /> 
    <a href="#">Second header</a> 
    <div>Second content</div> 
</div> 

... Ce que les champs cachés sont pris se dans le cadre de la structure de l'accordéon. Je voudrais déplacer les champs ID à l'intérieur des balises DIV. Des idées?

merci encore, Tyler


Je vais avoir exactement le même problème que Tyler ici. Les champs cachés générés par fields_for désordonnent l'interface utilisateur de l'accordéon et pour l'instant je ne vois pas comment changer leur position sauf les déplacer avec javascript.

Je posterai un lien vers ce retour sur railsforum afin qu'espère que Tyler bénéficiera également de votre sagesse collective.

Cordialement,

Kevin.

Répondre

3

Depuis Rails 2.3.5 vous pouvez placer un f.hidden_field(:id) où vous voulez qu'il existe, et Rails remplir les détails.

Le billet au sujet de ce changement est available here.