Question

J'ai une table des lieux et j'ajouter des offres de chaque site en utilisant un formulaire imbriqué sur la page d'édition des lieux. Cependant, chaque fois que j'ajouter une nouvelle offre sous forme fields_for enregistre le texte saisi et crée une nouvelle forme de blanc pour un autre enregistrement de l'offre à ajouter.

Je veux juste une « ajouter une nouvelle offre » forme pas un pour chaque enregistrement ajouté.

aucune offre ajoutée - c'est très bien: entrer image description ici

une offre ajoutée - maintenant Theres 2 'ajouter une nouvelle offre' des formes et une offre de blanc indésirable partielle:

entrer image description ici

Voici ce que je veux ressembler après avoir ajouté une offre: entrer image description ici

Le nombre de nouvelles formes d'offre de blanc et blanc change avec partials le numéro en cours de construction dans le contrôleur (à la minute son 1)

contrôleur sites

class VenuesController < ApplicationController   
  def edit
    @venue = Venue.find(params[:id])
    1.times { @venue.offers.build }
  end

  def update
    @venue = Venue.find(params[:id])
    if @venue.update_attributes(params[:venue])
      flash[:notice] = 'Venue updated successfully'
      redirect_to :back
    end
  end
end

Lieux modèle

class Venue < ActiveRecord::Base
  has_many :offers
  accepts_nested_attributes_for :offers
end

sites edit.html.erb

      <%= form_for @venue do |f| %>

        <h2 class="venue_show_orange">Offers</h2>

        <div class="edit_venue_details">
          <% if @venue.offers.count.zero? %>
            <div class="no_offers">
              No offers added yet.
            </div>
          <% else %>
            <%= render :partial => 'offers/offer', :collection => @venue.offers %>
          <% end %>

          <div class="clearall"></div>

          <h2 class="edit_venue_sub_header">Add a new offer</h2>    

          <%= f.fields_for :offers do |offer| %>
            <p class="edit_venue">title: <br>
            <%= offer.text_field :title, :class => "edit_venue_input" %></p>
          <% end %>
        </div>

        <button class="submit_button" type="submit"> Save changes</button>
      <% end %>

Alors, comment puis-je avoir juste une nouvelle forme ajouter l'offre sur la page d'édition des lieux, ce qui me permet d'ajouter une nouvelle offre obture alors la forme afin qu'il puisse être utilisé à nouveau? Aussi, est-il un moyen d'éviter que les partials offre de blanc en cours de création?

Merci beaucoup pour toute aide de son très apprécié!

Était-ce utile?

La solution

class VenuesController < ApplicationController   
  def edit
    @venue = Venue.find(params[:id])
  end
  ...
end

lieux edit.html.erb

<%= f.fields_for :offers, @venue.offers.build do |offer| %>
  <p class="edit_venue">title: <br>
  <%= offer.text_field :title, :class => "edit_venue_input" %></p>
<% end %>

Autres conseils

Je ne suis pas sûr que cela fonctionnera, mais avez-vous essayé ce qui suit?

<%= f.fields_for @venue.offers.last do |offer| %>

Je pense que le problème est que vous passez le symbole:. Offres, les champs de cause pour créer des champs pour toutes les offres, mais vous devriez être en mesure de passer seulement un objet spécifique à la méthode fields_for ainsi

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