Hi!
I have created a nested form and now I want to make it dynamic. I have two
models, "Applications" and "Participants". Each application
may have
several participants, but at least one which is the contact person. An
issue that I have is that when the form is not validated it renders the
participants fields twice.
- How can I avoid that?
# Applications/new.html.erb
<div class="row span8 offset2 form-wrapper">
<h1>Ny anmälan</h1>
<%= semantic_form_for @application, :html => { :class =>
"form-horizontal"
} do |f| %>
<%= f.semantic_errors %>
<%= f.inputs do %>
<%= f.inputs :for => :participants, :name => "Kontaktperson",
:class =>
"participants_form well" do |p| %>
<%= p.input :name, :label => "Namn", :required => true %>
<%= p.input :address, :label => "Adress", :required => true
%>
<%= p.input :phone, :label => "Mobiltelefon", :required =>
true %>
<%= p.input :email, :label => "Epostadress", :as => :email,
:required =>
true %>
<%= p.input :age, :label => "Ålder" %>
<%= p.input :has_something, :label => "Ja..." %>
<%= p.input :special_food, :label => "Annan specialkost" %>
<%= p.input :is_contact, :as => :hidden, :value => true %>
<% end %>
<%= f.inputs :class => "participants_fields" do %>
<%= render "participant_form", :f => f %>
<% end %>
<%= link_to "<i class=\"icon-plus-sign\"> </i>
Lägg till fler
deltagare...".html_safe, "#", :class => "btn
pull-right" %>
<%= f.inputs :name => "Övrig information" do %>
<%= f.input :extra_information, :input_html => { :class =>
"span4", :rows
=> 3 } %>
<%= f.input :membership_paid, :label => "JA" %>
<% end %>
<% end %>
<%= f.buttons do %>
<%= f.submit :value => "Skicka anmälan", :class => "btn
btn-primary
btn-large commit create" %>
<% end %>
<% end %>
</div>
# Applications Controller
def new
@application = Application.new
@application.participants.build
respond_to do |format|
format.html
format.js { render :nothing }
end
end
def create
@application = Application.new(params[:application])
if @application.save
flash[:notice] = "Din anmälan har skickats!"
redirect_to root_path
else
flash[:error] = "Det gick inte att spara din anmälan"
render :action => "new"
end
end
I guess that my participants gets built again when it renders the new
action in the "create" method. But how can I avoid that?
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To view this discussion on the web visit
https://groups.google.com/d/msg/rubyonrails-talk/-/ihqbWCmIL0YJ.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.
is there a way to check if the participant field is already created before creating it? Is_A and Has_A relationships. Describe the relationship between the forms On 4 April 2012 14:42, Linus Pettersson <linus.pettersson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hi! > > I have created a nested form and now I want to make it dynamic. I have two > models, "Applications" and "Participants". Each application may have > several participants, but at least one which is the contact person. An > issue that I have is that when the form is not validated it renders the > participants fields twice. > > - How can I avoid that? > > # Applications/new.html.erb > <div class="row span8 offset2 form-wrapper"> > <h1>Ny anmälan</h1> > > <%= semantic_form_for @application, :html => { :class => "form-horizontal" > } do |f| %> > <%= f.semantic_errors %> > <%= f.inputs do %> > <%= f.inputs :for => :participants, :name => "Kontaktperson", :class => > "participants_form well" do |p| %> > <%= p.input :name, :label => "Namn", :required => true %> > <%= p.input :address, :label => "Adress", :required => true %> > <%= p.input :phone, :label => "Mobiltelefon", :required => true %> > <%= p.input :email, :label => "Epostadress", :as => :email, :required => > true %> > <%= p.input :age, :label => "Ålder" %> > <%= p.input :has_something, :label => "Ja..." %> > <%= p.input :special_food, :label => "Annan specialkost" %> > <%= p.input :is_contact, :as => :hidden, :value => true %> > <% end %> > > <%= f.inputs :class => "participants_fields" do %> > <%= render "participant_form", :f => f %> > <% end %> > <%= link_to "<i class=\"icon-plus-sign\"> </i> Lägg till fler > deltagare...".html_safe, "#", :class => "btn pull-right" %> > > <%= f.inputs :name => "Övrig information" do %> > <%= f.input :extra_information, :input_html => { :class => "span4", :rows > => 3 } %> > <%= f.input :membership_paid, :label => "JA" %> > <% end %> > <% end %> > > <%= f.buttons do %> > <%= f.submit :value => "Skicka anmälan", :class => "btn btn-primary > btn-large commit create" %> > <% end %> > <% end %> > </div> > > # Applications Controller > def new > @application = Application.new > @application.participants.build > respond_to do |format| > format.html > format.js { render :nothing } > end > end > > def create > @application = Application.new(params[:application]) > > if @application.save > flash[:notice] = "Din anmälan har skickats!" > redirect_to root_path > else > flash[:error] = "Det gick inte att spara din anmälan" > render :action => "new" > end > end > > > I guess that my participants gets built again when it renders the new > action in the "create" method. But how can I avoid that? > > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/rubyonrails-talk/-/ihqbWCmIL0YJ. > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
I don''t quite understand what you mean. Do you understand my problem? When the user enters the information into the form correctly and it validates everything works great. However, if it is not correctly filled out the "new" action will get re-rendered and displaying the form errors. The issue is that instead of showing 2 Participant "fields groups" it now displays 4, using the code above. Den onsdagen den 4:e april 2012 kl. 20:55:43 UTC+2 skrev Charles:> > is there a way to check if the participant field is already created before > creating it? > > Is_A and Has_A relationships. Describe the relationship between the forms > > > On 4 April 2012 14:42, Linus Pettersson <> wrote: > >> Hi! >> >> I have created a nested form and now I want to make it dynamic. I have >> two models, "Applications" and "Participants". Each application may have >> several participants, but at least one which is the contact person. An >> issue that I have is that when the form is not validated it renders the >> participants fields twice. >> >> - How can I avoid that? >> >> # Applications/new.html.erb >> <div class="row span8 offset2 form-wrapper"> >> <h1>Ny anmälan</h1> >> >> <%= semantic_form_for @application, :html => { :class => >> "form-horizontal" } do |f| %> >> <%= f.semantic_errors %> >> <%= f.inputs do %> >> <%= f.inputs :for => :participants, :name => "Kontaktperson", :class => >> "participants_form well" do |p| %> >> <%= p.input :name, :label => "Namn", :required => true %> >> <%= p.input :address, :label => "Adress", :required => true %> >> <%= p.input :phone, :label => "Mobiltelefon", :required => true %> >> <%= p.input :email, :label => "Epostadress", :as => :email, :required => >> true %> >> <%= p.input :age, :label => "Ålder" %> >> <%= p.input :has_something, :label => "Ja..." %> >> <%= p.input :special_food, :label => "Annan specialkost" %> >> <%= p.input :is_contact, :as => :hidden, :value => true %> >> <% end %> >> >> <%= f.inputs :class => "participants_fields" do %> >> <%= render "participant_form", :f => f %> >> <% end %> >> <%= link_to "<i class=\"icon-plus-sign\"> </i> Lägg till fler >> deltagare...".html_safe, "#", :class => "btn pull-right" %> >> >> <%= f.inputs :name => "Övrig information" do %> >> <%= f.input :extra_information, :input_html => { :class => "span4", :rows >> => 3 } %> >> <%= f.input :membership_paid, :label => "JA" %> >> <% end %> >> <% end %> >> >> <%= f.buttons do %> >> <%= f.submit :value => "Skicka anmälan", :class => "btn btn-primary >> btn-large commit create" %> >> <% end %> >> <% end %> >> </div> >> >> # Applications Controller >> def new >> @application = Application.new >> @application.participants.build >> respond_to do |format| >> format.html >> format.js { render :nothing } >> end >> end >> >> def create >> @application = Application.new(params[:application]) >> >> if @application.save >> flash[:notice] = "Din anmälan har skickats!" >> redirect_to root_path >> else >> flash[:error] = "Det gick inte att spara din anmälan" >> render :action => "new" >> end >> end >> >> >> I guess that my participants gets built again when it renders the new >> action in the "create" method. But how can I avoid that? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "Ruby on Rails: Talk" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/rubyonrails-talk/-/ihqbWCmIL0YJ. >> To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >> To unsubscribe from this group, send email to >> rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org >> For more options, visit this group at >> http://groups.google.com/group/rubyonrails-talk?hl=en. >> > > > > >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To view this discussion on the web visit https://groups.google.com/d/msg/rubyonrails-talk/-/fl-g8AYGOXMJ. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
when your validation fails you''re calling "new" again. you should create something called "validate" the path created does not provide desired results. Create a different path. On 4 April 2012 15:51, Linus Pettersson <linus.pettersson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I don''t quite understand what you mean. > > Do you understand my problem? > > When the user enters the information into the form correctly and it > validates everything works great. However, if it is not correctly filled > out the "new" action will get re-rendered and displaying the form errors. > The issue is that instead of showing 2 Participant "fields groups" it now > displays 4, using the code above. > > > > Den onsdagen den 4:e april 2012 kl. 20:55:43 UTC+2 skrev Charles: >> >> is there a way to check if the participant field is already created >> before creating it? >> >> Is_A and Has_A relationships. Describe the relationship between the forms >> >> >> On 4 April 2012 14:42, Linus Pettersson <> wrote: >> >>> Hi! >>> >>> I have created a nested form and now I want to make it dynamic. I have >>> two models, "Applications" and "Participants". Each application may have >>> several participants, but at least one which is the contact person. An >>> issue that I have is that when the form is not validated it renders the >>> participants fields twice. >>> >>> - How can I avoid that? >>> >>> # Applications/new.html.erb >>> <div class="row span8 offset2 form-wrapper"> >>> <h1>Ny anmälan</h1> >>> >>> <%= semantic_form_for @application, :html => { :class => >>> "form-horizontal" } do |f| %> >>> <%= f.semantic_errors %> >>> <%= f.inputs do %> >>> <%= f.inputs :for => :participants, :name => "Kontaktperson", :class => >>> "participants_form well" do |p| %> >>> <%= p.input :name, :label => "Namn", :required => true %> >>> <%= p.input :address, :label => "Adress", :required => true %> >>> <%= p.input :phone, :label => "Mobiltelefon", :required => true %> >>> <%= p.input :email, :label => "Epostadress", :as => :email, :required => >>> true %> >>> <%= p.input :age, :label => "Ålder" %> >>> <%= p.input :has_something, :label => "Ja..." %> >>> <%= p.input :special_food, :label => "Annan specialkost" %> >>> <%= p.input :is_contact, :as => :hidden, :value => true %> >>> <% end %> >>> >>> <%= f.inputs :class => "participants_fields" do %> >>> <%= render "participant_form", :f => f %> >>> <% end %> >>> <%= link_to "<i class=\"icon-plus-sign\"> </i> Lägg till fler >>> deltagare...".html_safe, "#", :class => "btn pull-right" %> >>> >>> <%= f.inputs :name => "Övrig information" do %> >>> <%= f.input :extra_information, :input_html => { :class => "span4", >>> :rows => 3 } %> >>> <%= f.input :membership_paid, :label => "JA" %> >>> <% end %> >>> <% end %> >>> >>> <%= f.buttons do %> >>> <%= f.submit :value => "Skicka anmälan", :class => "btn btn-primary >>> btn-large commit create" %> >>> <% end %> >>> <% end %> >>> </div> >>> >>> # Applications Controller >>> def new >>> @application = Application.new >>> @application.participants.**build >>> respond_to do |format| >>> format.html >>> format.js { render :nothing } >>> end >>> end >>> >>> def create >>> @application = Application.new(params[:**application]) >>> >>> if @application.save >>> flash[:notice] = "Din anmälan har skickats!" >>> redirect_to root_path >>> else >>> flash[:error] = "Det gick inte att spara din anmälan" >>> render :action => "new" >>> end >>> end >>> >>> >>> I guess that my participants gets built again when it renders the new >>> action in the "create" method. But how can I avoid that? >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Ruby on Rails: Talk" group. >>> To view this discussion on the web visit https://groups.google.com/d/** >>> msg/rubyonrails-talk/-/**ihqbWCmIL0YJ<https://groups.google.com/d/msg/rubyonrails-talk/-/ihqbWCmIL0YJ> >>> . >>> To post to this group, send email to rubyonrails-talk@googlegroups.**com<rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> >>> . >>> To unsubscribe from this group, send email to >>> rubyonrails-talk+unsubscribe@**googlegroups.com<rubyonrails-talk%2Bunsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> >>> . >>> For more options, visit this group at http://groups.google.com/** >>> group/rubyonrails-talk?hl=en<http://groups.google.com/group/rubyonrails-talk?hl=en> >>> . >>> >> >> >> >> >> -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Talk" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/rubyonrails-talk/-/fl-g8AYGOXMJ. > > To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > To unsubscribe from this group, send email to > rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org > For more options, visit this group at > http://groups.google.com/group/rubyonrails-talk?hl=en. >-- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com. For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.