Hello guys and girls, I have a problem with a method (new), it is using 100% of CPU for 15/20 seconds. Follow the method below: http://pastie.org/537568 ## kits_controller.rb def new @page_title = ''Add a Kit'' @kit = Kit.new @num_itens = 16 @kit_inclusions = Array.new @num_itens.times { @kit_inclusions.push(KitInclusion.new) } render :action => ''form'' end def new_do kit = Kit.new(params[:form]) if kit.save params[:kit_inclusions].each do |ki| next if ki[:product_id].empty? kit_inclusion = KitInclusion.new(ki) kit_inclusion.kit_id = kit.id kit_inclusion.save end flash[:notice] = ''Kit added!'' redirect_to :action => ''index'' else flash[:notice] = kit.errors.full_messages.map {|fm| "<li>#{fm}</ li>"} redirect_to :action => ''new'' end end ## form.hmtl.erb <% form_for :form, @kit, :url => { :action => action_do } do |f| -%> <% @num_itens.times do |t| -%> <% fields_for "kit_inclusions[]", @kit_inclusions[t] do |i| -%> <li><label><strong>Product <%= t + 1 %>:</strong></label><%i.collection_select "product_id", Product.all(:conditions => {:available => true}, :order => "category_id, model ASC"), :id, :display_for_select, {:include_blank => ''Select...''}, {:onchange => "qntDefault(\''quantity_#{t}\'');"} %><%= i.text_field "quantity", {:onkeydown => "return noLetters(event);", :class => ''quantity'', :id => "quantity_#{t}"} %></li> <% end -%> <% end -%> <%= image_submit_tag ''btn_save.png'' %></div> <%= f.hidden_field :id %> <% end -%>
Can you give more information on your environment? It shouldn''t be taking that long... I''d also advise you to read more documentation; some parts of your code are working against the Rails default conventions (for instance: the action that creates records is typically ''create'', not ''new_do''). It''s a small thing, but it means that you have to do extra typing (example: the :url option to form_for). You may also, if you''re on 2.3, want to look into the nested model support stuff, which will handle much of what you''re doing here. --Matt Jones On Jul 7, 4:52 pm, Leandro Maioral <leandro.maio...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Hello guys and girls, I have a problem with a method (new), it is > using 100% of CPU for 15/20 seconds. Follow the method below: > > http://pastie.org/537568 > > ## kits_controller.rb > def new > @page_title = ''Add a Kit'' > @kit = Kit.new > > @num_itens = 16 > @kit_inclusions = Array.new > @num_itens.times { @kit_inclusions.push(KitInclusion.new) } > > render :action => ''form'' > end > > def new_do > kit = Kit.new(params[:form]) > > if kit.save > params[:kit_inclusions].each do |ki| > next if ki[:product_id].empty? > > kit_inclusion = KitInclusion.new(ki) > kit_inclusion.kit_id = kit.id > kit_inclusion.save > end > > flash[:notice] = ''Kit added!'' > redirect_to :action => ''index'' > else > flash[:notice] = kit.errors.full_messages.map {|fm| "<li>#{fm}</ > li>"} > redirect_to :action => ''new'' > end > end > > ## form.hmtl.erb > <% form_for :form, @kit, :url => { :action => action_do } do |f| -%> > <% @num_itens.times do |t| -%> > <% fields_for "kit_inclusions[]", @kit_inclusions[t] do |i| -%> > <li><label><strong>Product <%= t + 1 %>:</strong></label><%> i.collection_select "product_id", Product.all(:conditions => > {:available => true}, :order => "category_id, model > ASC"), :id, :display_for_select, {:include_blank => ''Select...''}, > {:onchange => "qntDefault(\''quantity_#{t}\'');"} %><%= i.text_field > "quantity", {:onkeydown => "return noLetters(event);", :class => > ''quantity'', :id => "quantity_#{t}"} %></li> > <% end -%> > <% end -%> > <%= image_submit_tag ''btn_save.png'' %></div> > <%= f.hidden_field :id %> > <% end -%>
Hello Matt, thanks for the atention. I''m under Ruby 1.8.6 and Rails 2.3.2. The machine is a Macbook Pro with a Core 2 Duo 2.4GHz and 4GB of RAM. I have declared the nested conditions in the model as seen bellow. class Kit < ActiveRecord::Base has_many :kit_inclusions has_many :products, :through => :kit_inclusions accepts_nested_attributes_for :kit_inclusions, :allow_destroy => true def before_validation self.name = self.name.to_s.strip.downcase.titleize self.comments = self.comments.to_s.strip.capitalize end validates_presence_of :name, :message => ''é requerido'' def to_s self.name end end On 8 jul, 15:50, Matt Jones <al2o...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> Can you give more information on your environment? It shouldn''t be > taking that long... > > I''d also advise you to read more documentation; some parts of your > code are working against the Rails default conventions (for instance: > the action that creates records is typically ''create'', not ''new_do''). > It''s a small thing, but it means that you have to do extra typing > (example: the :url option to form_for). > > You may also, if you''re on 2.3, want to look into the nested model > support stuff, which will handle much of what you''re doing here. > > --Matt Jones > > On Jul 7, 4:52 pm, Leandro Maioral <leandro.maio...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote: > > > > > Hello guys and girls, I have a problem with a method (new), it is > > using 100% of CPU for 15/20 seconds. Follow the method below: > > >http://pastie.org/537568 > > > ## kits_controller.rb > > def new > > @page_title = ''Add a Kit'' > > @kit = Kit.new > > > @num_itens = 16 > > @kit_inclusions = Array.new > > @num_itens.times { @kit_inclusions.push(KitInclusion.new) } > > > render :action => ''form'' > > end > > > def new_do > > kit = Kit.new(params[:form]) > > > if kit.save > > params[:kit_inclusions].each do |ki| > > next if ki[:product_id].empty? > > > kit_inclusion = KitInclusion.new(ki) > > kit_inclusion.kit_id = kit.id > > kit_inclusion.save > > end > > > flash[:notice] = ''Kit added!'' > > redirect_to :action => ''index'' > > else > > flash[:notice] = kit.errors.full_messages.map {|fm| "<li>#{fm}</ > > li>"} > > redirect_to :action => ''new'' > > end > > end > > > ## form.hmtl.erb > > <% form_for :form, @kit, :url => { :action => action_do } do |f| -%> > > <% @num_itens.times do |t| -%> > > <% fields_for "kit_inclusions[]", @kit_inclusions[t] do |i| -%> > > <li><label><strong>Product <%= t + 1 %>:</strong></label><%> > i.collection_select "product_id", Product.all(:conditions => > > {:available => true}, :order => "category_id, model > > ASC"), :id, :display_for_select, {:include_blank => ''Select...''}, > > {:onchange => "qntDefault(\''quantity_#{t}\'');"} %><%= i.text_field > > "quantity", {:onkeydown => "return noLetters(event);", :class => > > ''quantity'', :id => "quantity_#{t}"} %></li> > > <% end -%> > > <% end -%> > > <%= image_submit_tag ''btn_save.png'' %></div> > > <%= f.hidden_field :id %> > > <% end -%>
Hello guys and girls, I have a problem with a method (new), it is using 100% of CPU for 15/20 seconds. Follow the method below: http://pastie.org/537568 ## kits_controller.rb def new @page_title = ''Add a Kit'' @kit = Kit.new @num_itens = 16 @kit_inclusions = Array.new @num_itens.times { @kit_inclusions.push(KitInclusion.new) } render :action => ''form'' end def new_do kit = Kit.new(params[:form]) if kit.save params[:kit_inclusions].each do |ki| next if ki[:product_id].empty? kit_inclusion = KitInclusion.new(ki) kit_inclusion.kit_id = kit.id kit_inclusion.save end flash[:notice] = ''Kit added!'' redirect_to :action => ''index'' else flash[:notice] = kit.errors.full_messages.map {|fm| "<li>#{fm}</ li>"} redirect_to :action => ''new'' end end ## form.hmtl.erb <% form_for :form, @kit, :url => { :action => action_do } do |f| -%> <% @num_itens.times do |t| -%> <% fields_for "kit_inclusions[]", @kit_inclusions[t] do |i| - %> <li><label><strong>Product <%= t + 1 %>:</strong></label>< %i.collection_select "product_id", Product.all(:conditions => {:available => true}, :order => "category_id, model ASC"), :id, :display_for_select, {:include_blank => ''Select...''}, {:onchange => "qntDefault(\''quantity_#{t}\'');"} %><%= i.text_field "quantity", {:onkeydown => "return noLetters(event);", :class => ''quantity'', :id => "quantity_#{t}"} %></li> <% end -%> <% end -%> <%= image_submit_tag ''btn_save.png'' %></div> <%= f.hidden_field :id %> <% end -%>