Arwuah _
2006-Mar-06 18:50 UTC
[Rails] Computer Inventory: Problems Retaining Values in a Forms
This is my first rails app and I am creating a Computer Inventory system as practice. The problem I am having seems trivial, but I can not figure out what exactly is going wrong, so this is where help from those of you who are more experienced is needed. I am having problems retaining the values in some of my forms. Everything works fine when I am creating or editing a Computer in the inventory application. However I am having problems with sub-forms, such as the ones to add (new_hardware.rhtml and new_software.rhtml) and modify HardwareComponent or a SoftwareComponent. In these sub-forms, which belong to a Computer, I can add (http://../new_software/15) a SoftwareComponent without any problems just as long as I do not forget any fields. For instance, when adding a SoftwareComponent, if I forget a field in the form and the user clicks on the create button I am presented with the appropriate error messages via this page (http://../create_software), but my id from (http://.../new_software/15) is lost at this point. I know this because if I click "create" once more (a second time) I am presented with the error "Couldn''t find Computer with ID=". If I enter all the required fields the software component gets created properly and linked to its appropriate computer in the database. Below I have the code for editing a piece of software that was recently added to the database. This same behavior I just described above happens, but with the additional problem of the values not being returned from the database when it is time to edit. If I click the delete button the software is properly deleted, so I know I have the right id. I do not know what I am doing wrong. Please help. Below are the models and other pieces in the application worth displaying. If anymore information is needed please let me know. computer.rb ===============================has_many :software_components software_component.rb ===============================belongs_to :computer The links in the view to edit a peice of software: _list_computers.rhtml ===============================...snip...snip... <%= software["name"] %> - <%= software["license"] %> ( <%= link_to ''Edit'', :action => "edit_software", :id => software.id %> <%= link_to ''Delete'', { :action => "destroy_software", :id => software.id }, :confirm => "Are you sure?" %> ) <br /> ...snip...snip... admin_controller.rb ======================>> Any idea why I do not see any values>> in the edit form when trying to edit a software that is already in thedatabase? def edit_software @software = SoftwareComponent.find(params[:id]) end def update_software @software = SoftwareComponent.find(params[:id]) if @software.update_attributes (params[:software_component]) flash[:notice] = ''Software was successfully updated.'' redirect_to :action => ''list_computers'' else render :action => ''edit_software'' end end Below if the output from my development.log file when trying to debug this issue. I followed the same convention for adding and editing a Computer, which works with no problems.>From File: logs/development.log==========================>> When editing a Computer all the values>> appear correctly in the form. When trying >> to edit a SoftwareComponent nothing appears >> in my form and I get a similiar log message >> for the SoftwareComponent as you will see below.Person Load (0.000681) SELECT concat(last_name, '', '',first_name) as full_name, id FROM people ORDER BY last_name ASC Processing AdminController#edit_computer (for 123.45.234.345 at 2006-03-05 20:31:05) [GET] Parameters: {"action"=>"edit_computer", "id"=>"15", "controller"=>"admin"} Computer Load (0.001611) SELECT * FROM computers WHERE (computers.id ''15'') LIMIT 1 Rendering within layouts/admin Rendering admin/edit_computer Computer Columns (0.001455 ) SHOW FIELDS FROM computers Person Columns (0.001148) SHOW FIELDS FROM people Rendered admin/_form_new_computer (0.01427) Completed in 0.02637 (37 reqs/sec) | Rendering: 0.01961 (74%) | DB: 0.00489(18%) | 200 OK [ http://rails.list.help.com/myinventory/admin/edit_computer/15] Person Load (0.000669) SELECT concat(last_name, '', '',first_name) as full_name, id FROM people ORDER BY last_name ASC Processing AdminController#edit_software (for 123.45.234.345 at 2006-03-05 20:31:15) [GET] Parameters: {"action"=>"edit_software", "id"=>"5", "controller"=>"admin"} SoftwareComponent Load (0.000957) SELECT * FROM software_components WHERE (software_components.id = ''5'') LIMIT 1 Rendering within layouts/admin Rendering admin/edit_software SoftwareComponent Columns ( 0.001039) SHOW FIELDS FROM software_components Rendered admin/_form_new_software (0.00235) Completed in 0.01340 (74 reqs/sec) | Rendering: 0.00883 (65%) | DB: 0.00266(19%) | 200 OK [http://rails.list.help.com/myinventory/admin/edit_software/5 ] Regards, Arwuah _ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060306/e4c13362/attachment-0001.html
Derrick Spell
2006-Mar-06 19:05 UTC
[Rails] Computer Inventory: Problems Retaining Values in a Forms
On Mar 6, 2006, at 1:50 PM, Arwuah _ wrote:> This is my first rails app and I am creating a Computer Inventory > system as practice. The problem I am having seems trivial, but I > can not figure out what exactly is going wrong, so this is where > help from those of you who are more experienced is needed. > > I am having problems retaining the values in some of my forms. > Everything works fine when I am creating or editing a Computer in > the inventory application. However I am having problems with sub- > forms, such as the ones to add (new_hardware.rhtml and > new_software.rhtml) and modify HardwareComponent or a > SoftwareComponent. > > In these sub-forms, which belong to a Computer, I can add > (http://../new_software/15) a SoftwareComponent without any > problems just as long as I do not forget any fields. For instance, > when adding a SoftwareComponent, if I forget a field in the form > and the user clicks on the create button I am presented with the > appropriate error messages via this page (http://../ > create_software), but my id from (http://.../new_software/15) is > lost at this point. I know this because if I click "create" once > more (a second time) I am presented with the error "Couldn''t find > Computer with ID=". If I enter all the required fields the software > component gets created properly and linked to its appropriate > computer in the database. >Your create_software action should be redirecting back to new_software if the save fails. Something like: if software.save blah blah... else redirect_to :action => "new_software" end In other words, you shouldn''t be click a create button when the url shows http:// ../create_software You don''t show your code for the edit_software view, but I''m guessing that you didn''t supply the :id parameter to the form_tag helper. Something like: <%= start_form_tag :action => "update_software", :id => @software %> -Derrick Spell
Arwuah _
2006-Mar-06 19:27 UTC
[Rails] Computer Inventory: Problems Retaining Values in a Forms
On 3/6/06, Derrick Spell <derrickspell@cdmplus.com> wrote:> > > On Mar 6, 2006, at 1:50 PM, Arwuah _ wrote: > > > This is my first rails app and I am creating a Computer Inventory > > system as practice. The problem I am having seems trivial, but I > > can not figure out what exactly is going wrong, so this is where > > help from those of you who are more experienced is needed. > > > > I am having problems retaining the values in some of my forms. > > Everything works fine when I am creating or editing a Computer in > > the inventory application. However I am having problems with sub- > > forms, such as the ones to add (new_hardware.rhtml and > > new_software.rhtml) and modify HardwareComponent or a > > SoftwareComponent. > > > > In these sub-forms, which belong to a Computer, I can add > > (http://../new_software/15) a SoftwareComponent without any > > problems just as long as I do not forget any fields. For instance, > > when adding a SoftwareComponent, if I forget a field in the form > > and the user clicks on the create button I am presented with the > > appropriate error messages via this page (http://../ > > create_software), but my id from (http://.../new_software/15) is > > lost at this point. I know this because if I click "create" once > > more (a second time) I am presented with the error "Couldn''t find > > Computer with ID=". If I enter all the required fields the software > > component gets created properly and linked to its appropriate > > computer in the database. > > > > Your create_software action should be redirecting back to > new_software if the save fails. Something like:Derrick, thanks for the quick response. My create_software action is just as you suggested: ...snip...snp... def create_software @software = SoftwareComponent.new(params[:software_component]) @computer = Computer.find(params[:computer_id]) @computer.software_components << @software if @computer.save flash[:notice] = "Software was successfully created." redirect_to :action => ''list_computers'' else render :action => ''new_software'' end end ...snip...snp... if software.save> blah blah... > else > redirect_to :action => "new_software" > end > > In other words, you shouldn''t be click a create button when the url > shows http:// ../create_software > > You don''t show your code for the edit_software view, but I''m guessing > that you didn''t supply the :id parameter to the form_tag helper. > Something like:And my "edit_software view" is just as you pointed out: <%= start_form_tag :action => ''update_software'', :id => @software %> <%= render :partial => ''form_new_software'' %> <%= submit_tag ''Commit Change(s)'' %> <%= end_form_tag %> <%= link_to ''Show'', :action => ''show_software'', :id => @software %> | <%= link_to ''Back'', :action => ''list_computers'' %> <%= start_form_tag :action => "update_software", :id => @software %> Additionally here is my new_software.rhtml <h1>New Software</h1> <%= start_form_tag :action => ''create_software'' %> <%= render :partial => ''form_new_software'' %> <%= submit_tag "Create" %> <%= end_form_tag %> <%= link_to ''Back'', :action => ''list_computers'' %> I am still having the problems pointed out in my original email. Any ideas on what else I could be overlooking? Thanks, -Arwuah _ -Derrick Spell> _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails >-------------- next part -------------- An HTML attachment was scrubbed... URL: http://wrath.rubyonrails.org/pipermail/rails/attachments/20060306/0572221f/attachment-0001.html