Yes, exactly! But I don't know JS.... :( On Tuesday, February 5, 2013 10:46:57 AM UTC-8, Benjamin Wanicur wrote: > > If we are correct in assuming the @invoice object here is a result of > @invoice = Invoice.new, then another option for creating multiple, > identical invoice objects from a form row is to use some javascript. You > could write a JS function that would take the values from the initial "form > row" and duplicate them into a second form row (and so on... creating many > duplicate rows). You would end up with a form containing data for many > Invoice objects. In your ruby code you would need the #create method to > deal with a collection of objects rather than just a single object. > > > On Tue, Feb 5, 2013 at 9:35 AM, Jason King <[email protected] > <javascript:>>wrote: > >> Start with the simple case, where they create an new invoice from >> scratch. In the `new` action (which is the action that displays the empty >> form to start with) you'll have something like @invoice = Invoice.new to >> pre-populate an @invoice object so that `form_for` in your view works. >> >> Then, once that's working, with the `create` action also working, add a >> new checkbox (or maybe a second submit button, up to you) to your form, >> something like "Create another like this one". Then in your `create` >> action that receives your invoice you want to check for that checkbox and >> if it exists then once you've saved your invoice you're going to set >> @invoice >> = @invoice.dup and then render :new which will display that same form, >> this time with all the fields from the invoice that was just submitted. >> Note that when that checkbox is checked you will need to `render` and not >> `redirect_to` - that's the only trick here really >> >> On Tue, Feb 5, 2013 at 7:59 AM, KT <[email protected] <javascript:>>wrote: >> >>> Correct - the issue is that I need to create the first invoice first, >>> then duplicate it as many times as needed - like an Excel row. So, can I >>> do that all in one form or must I first save a record, then dup it? >>> Basically, the users need to create a bunch of invoices at the same time >>> and to eliminate having to enter the same info over and over, just copy the >>> row above and change a couple attributes.... just like Excel. >>> >>> I'm stuck. >>> >>> >>> On Thursday, January 31, 2013 4:48:26 PM UTC-8, Jason King wrote: >>> >>>> My understanding is that that's what ActiveRecord::Base#dup does. >>>> >>>> Based on the error you're getting KT I'd actually guess that the >>>> problem here is that the initial @invoice that's used in the form_for >>>> doesn't have an id, which means that Invoice.find(params[:id]) is being >>>> called with a nil id, which generates the "Couldn't find an invoice >>>> without an ID" error that you're getting. >>>> >>>> So, how are you setting that @invoice in the controller action that * >>>> displays* the form? >>>> >>>> >>>> On Thu, Jan 31, 2013 at 3:42 PM, Robert Kaufman <[email protected]>wrote: >>>> >>>>> Hi KT, >>>>> The problem is that Rails automatically decides whether you are >>>>> updating or creating a new record based on whether your instance >>>>> (@invoice >>>>> in this case) things it is a new record or not. The memory dup you are >>>>> making thinks it is an existing record, even though its id is blank. >>>>> Changing your controller action to something like this should do the >>>>> trick: >>>>> >>>>> def clone_invoice >>>>> invoice = Invoice.find(params[:id]) >>>>> new_invoice = Invoice.new(invoice.**attributes.merge('id' => nil)) >>>>> end >>>>> >>>>> >>>>> Note, I removed your @ variables, since we're really only using them >>>>> inside of this method. It would be even better to have a make_clone >>>>> method >>>>> in your model which you would just call on the original invoice object >>>>> (that's just a little more OO). >>>>> >>>>> Best, >>>>> Rob >>>>> >>>>> On Jan 31, 2013, at 2:05 PM, KT <[email protected]> wrote: >>>>> >>>>> Hi all! I was hoping someone could help me with another issue... >>>>> >>>>> I have an INVOICE form. Users would like to create multiple records >>>>> at the same time. In addition, they would like to copy the first >>>>> record's >>>>> attributes for the next record, so they only have to change a few fields. >>>>> >>>>> Less typing. MS Excel style. >>>>> >>>>> I've seen the Railscast for adding multiple records through nested >>>>> attributes, but I'm using a single model, so I don't know how that >>>>> applies. I do not want to break out my flat invoice table if I can avoid >>>>> it. >>>>> >>>>> I've tried the following, but when I click on "Add Invoice", I get an >>>>> error: "Couldn't find an invoice without an ID". >>>>> >>>>> _form.html.erb: >>>>> >>>>> <% form_for @invoice, :html => { :multipart => true } do |f| %> >>>>> >>>>> <table class="ExcelTable2007"> >>>>> <tr> >>>>> <th class="heading">PO #<font color="red"> *</font></th> >>>>> <th class="heading">Invoice #<font color="red"> *</font></th> >>>>> <th class="heading">"Bill To" is Correct</th> >>>>> <th class="heading">Invoice Date<font color="red"> *</font></th> >>>>> <th class="heading">Date Received<font color="red"> >>>>> *</font></th> >>>>> <th class="heading">AP Clerk Note<font color="red"> >>>>> *</font></th> >>>>> <th class="heading">Division<font color="red"> *</font></th> >>>>> <th class="heading">GR Approver<font color="red"> *</font></th> >>>>> <th class="heading">Invoice Attachment<font color="red"> >>>>> *</font></th> >>>>> </tr> >>>>> <tr> >>>>> <td class="heading"><%= f.text_field :po_number, :size => 10 >>>>> %></td> >>>>> <td class="heading"><%= f.text_field :invoice_number, :size => >>>>> 10 %></td> >>>>> <td class="heading"><%= f.check_box :bill_to_address %></td> >>>>> <td class="heading"><%= f.calendar_date_select "invoice_date", >>>>> :time => false, :size => 12 %></td> >>>>> <td class="heading"><%= f.calendar_date_select "date_received", >>>>> :time => false, :size => 12 %></td> >>>>> <td class="heading"><%= f.text_field :clerk_note %></td> >>>>> <td class="heading"><%= f.collection_select :division_id, >>>>> Division.active.order(:**division), :id, :division, :include_blank => >>>>> true %></td> >>>>> <td class="heading"><%= f.collection_select :approver_username, >>>>> Aduser.order(:last_name, :first_name), :username, :fullname, >>>>> :include_blank >>>>> => true %></td> >>>>> <td class="heading"><%= f.file_field :attachment %></td> >>>>> </tr> >>>>> </p> >>>>> </table> >>>>>     <%= link_to "Add Invoice", >>>>> clone_invoice_url(@invoice) %> >>>>> <br> >>>>> <br> >>>>> >>>>> <div class="actions"> >>>>> <%= f.submit "Submit" %> >>>>> </div> >>>>> </p> >>>>> <% end %> >>>>> >>>>> ------------------------------**--------------- >>>>> >>>>> invoices_controller: >>>>> >>>>> def clone_invoice >>>>> @invoice = Invoice.find(params[:id]) >>>>> @new_invoice = @invoice.dup >>>>> end >>>>> >>>>> -- >>>>> -- >>>>> SD Ruby mailing list >>>>> [email protected] >>>>> >>>>> http://groups.google.com/**group/sdruby<http://groups.google.com/group/sdruby> >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "SD Ruby" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to sdruby+un...@**googlegroups.com. >>>>> >>>>> For more options, visit >>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>>> . >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> -- >>>>> SD Ruby mailing list >>>>> [email protected] >>>>> >>>>> http://groups.google.com/**group/sdruby<http://groups.google.com/group/sdruby> >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "SD Ruby" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to sdruby+un...@**googlegroups.com. >>>>> >>>>> For more options, visit >>>>> https://groups.google.com/**groups/opt_out<https://groups.google.com/groups/opt_out> >>>>> . >>>>> >>>>> >>>>> >>>> >>>> -- >>> -- >>> SD Ruby mailing list >>> [email protected] <javascript:> >>> http://groups.google.com/group/sdruby >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "SD Ruby" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected] <javascript:>. >>> For more options, visit https://groups.google.com/groups/opt_out. >>> >>> >>> >> >> -- >> -- >> SD Ruby mailing list >> [email protected] <javascript:> >> http://groups.google.com/group/sdruby >> --- >> You received this message because you are subscribed to the Google Groups >> "SD Ruby" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected] <javascript:>. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> > >
-- -- SD Ruby mailing list [email protected] http://groups.google.com/group/sdruby --- You received this message because you are subscribed to the Google Groups "SD Ruby" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
