7
votes

Multiples formes pour le même modèle dans une seule page

sur la page d'accueil de mon RAP Lyrics Explanation Site , il y a un endroit où les utilisateurs peuvent essayer d'expliquer une ligne stimulante: Texte alt http://dl.dropbox.com/u /2792776/screenshots/2010-02-06_1620.png p>

Voici le partial que j'utilise pour générer ceci: P>

<div class="stand_alone annotation" data-id="<%= annotation.id %>">
  <%= song_link(annotation.song, :class => :title) %>

  <span class="needs_exegesis"><%= annotation.referent.strip.gsub(/\n/, "\n <br />") %></span>

  <% form_for Feedback.new(:annotation_id => annotation.id, :created_by_id => current_user.try(:id), :email_address => current_user.try(:email)), :url => feedback_index_path, :live_validations => true do |f| %>
    <%= f.hidden_field :annotation_id %>
    <%= f.hidden_field :created_by_id %>
    <p style="margin-top: 1em">
        <%= f.text_area :body, :rows => 4, :style => 'width:96%', :example_text => "Enter your explanation" %>
    </p>
    <p>
      <% if current_user %>
        <%= f.hidden_field :email_address %>
      <% else %>
        <%= f.text_field :email_address, :example_text => "Your email address" %>
      <% end %>
      <%= f.submit "Submit", :class => :button, :style => 'margin-left: .1em;' %>
    </p>
  <% end %>
</div>


0 commentaires

5 Réponses :


3
votes

J'ai eu ce même problème sur un site que je travaille actuellement et je suis allé avec la solution que vous mentionnez en bas. Ce n'est pas répétitif si vous générez l'ID de manière programmatique et mettez la forme complète dans une partie partielle. Par exemple, sur mon site, j'ai plusieurs "entrées" par page, qui ont chacun deux formulaires de vote, un à voter et un pour voter. L'ID d'enregistrement pour chaque entrée est annexé à l'ID DOM de ses formulaires de vote pour le rendre unique, comme (montre simplement le bouton VOTE UP, le bouton DAST est similaire):

<% form_for [entry, Vote.new], :html => { :id => 'new_up_vote_' + entry.id.to_s } do |f| -%>
  <%= f.hidden_field :up_vote, :value => 1, :id => 'vote_up_vote_' + entry.id.to_s %>
  <%= image_submit_tag('/images/icon_vote_up.png', :id => 'vote_up_vote_submit' + entry.id.to_s, :class => 'vote-button vote-up-button') %>
<% end -%>


0 commentaires

6
votes

Avez-vous envisagé de nidé_attributes pour les modèles de rails? Au lieu d'avoir plusieurs formulaires de rétroaction code> neufs code> où chacun est lié à une annotation, vous pouvez avoir plusieurs formulaires d'annotation code> modifier code> lorsque chaque annotation comprend des champs pour un nouveau retour. L'ID des formulaires générés comprendrait l'identifiant d'annotations telle que edit_annotation_16 code>.

Le modèle d'annotation aurait une relation avec ses commentaires et accepterait également des attributs imbriqués pour eux. P>

class AnnotationsController < ApplicationController
  def edit
    @a = Annotation.find(1)
    @a.feedbacks.build
    @b = Annotation.find(2)
    @b.feedbacks.build
  end

  def update
    @annotation = Annotation.find(params[:id])
    @annotation.update_attributes(params[:annotation])
    @annotation.save!
    render :index
  end
end


0 commentaires

2
votes

J'ai aussi eu le même problème, mais je voulais une solution plus extensible que d'ajouter l'ID à chaque champ. Puisque nous utilisons déjà le formulaire ... | F | Notation L'astuce consiste à modifier le nom du modèle et à obtenir un nouveau préfixe HTML ID.

Utilisation d'une variante de cette méthode: http://www.dzone.com/snippets/create-classes-runtime (j'ai supprimé les choses bloquées)

Je crée un nouveau modèle qui est une copie exacte du modèle que je veux un deuxième formulaire pour la même page. Ensuite, utilisez ce nouveau modèle pour rendre le nouveau formulaire.

Si le premier formulaire utilise xxx

puis xxx

Votre préfixe d'identification sera 'Address_new_' au lieu de "Address_" pour la deuxième forme du même modèle. Lorsque vous lisez les paramètres du formulaire, vous pouvez créer un modèle d'adresse pour mettre les valeurs.


0 commentaires

1
votes

Pour ceux qui trébuchent ici, recherchez la solution pour rails 3.2 App, examinez cette question à la place:

Rails: Utilisation de form_for plusieurs fois (DOM IDS)


0 commentaires

12
votes

Si vous ne voulez pas modifier vos noms d'entrée ou votre structure de modèle, vous pouvez utiliser l'option ID pour rendre votre identifiant de formulaire unique et l'option à Créez vos identifiants d'entrée uniques: xxx

de cette façon notre identifiant de formulaire est unique, c'est-à-dire annotation_2_feedback et cela ajoutera également un préfixe, par exemple annotation_2 _ , à chaque entrée créée via f .


0 commentaires