Comment puis-je arrêter un emboîtées fields_for duplicateur les enregistrements ajoutés?
-
25-10-2019 - |
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:
une offre ajoutée - maintenant Theres 2 'ajouter une nouvelle offre' des formes et une offre de blanc indésirable partielle:
Voici ce que je veux ressembler après avoir ajouté une offre:
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é!
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