Submit multiple entries to database, from an array, in Rails on the same page -
i'm trying submit multiple entries database array. so, create multiple new entries , store them in array. in view, have form of checkboxes user check ones he/she wants add database. upon clicking submit, add each of these forms database in on shot. here code:
controller:
class eventsboyscontroller < applicationcontroller def new @season = find_season @meet = find_meet(@season) @athletes_boys = current_coach.athletes.where(boy: true) @events_boys = [] @athletes_boys.each |athlete| @events_boys << @meet.events_boys.new(:athlete_id => athlete.id) end @events = ["400 ih", "100", "1600", "400", "110 hh", "800", "3200", "200"] end def create debugger @season = find_season @meet = find_meet(@season) @events_boys = @meet.events_boys.create(events_boy_permit) # debugger if @events_boys.save redirect_to @events_boys, notice: 'season created.' else render action: "new" end end private def find_season season.find(params[:season_id]) end def find_meet season season.meets.find(params[:meet_id]) end def events_boy_permit params.require(:events_boy).permit(:season_id, :meet_id, :athlete_id, :boys_400_m_im, :boys_1600_m, :boys_400_m, :boys_110_m_hh, :boys_800_m, :boys_3200_m, :boys_200_m, :boys_100_m, :time_400_m_im, :time_1600_m, :time_400_m, :time_110_m_hh, :time_800_m, :time_3200_m, :time_200_m, :time_100_m, :place_400_m_im, :place_1600_m, :place_400_m, :place_110_m_hh, :place_800_m, :place_3200_m, :place_200_m, :place_100_m) end end
view:
<h1><%= "create new events boys #{@meet.name}" %></h1> <table id="events-table"> <tr> <th></th> <% @events.each |event| %> <th><%= event %></th> <% end %> </tr> <% @events_boys.each |event| %> <tr> <td><%= athlete.find_by_id(event.athlete_id).name %></td> <%= form_for [@season, @meet, event], :html => { :mulitpart => true } |f| %> <td><%= f.check_box :boys_400_m_im %></td> <td><%= f.check_box :boys_100_m %></td> <td><%= f.check_box :boys_1600_m %></td> <td><%= f.check_box :boys_400_m %></td> <td><%= f.check_box :boys_110_m_hh %></td> <td><%= f.check_box :boys_800_m %></td> <td><%= f.check_box :boys_3200_m %></td> <td><%= f.check_box :boys_200_m %></td> <td><%= f.submit "submit", :class => 'btn' %></td> <% end %> </tr> <% end %> </table> <script type="text/javascript"> var athletes = new array(); var arrayinathletes = new array(); element = document.getelementbyid("events-table"); var athletesarray = element.children[0].children (i=1; < athletesarray.length; i++) { var rowarray = athletesarray[i].children; arrayinathletes = []; arrayinathletes[0] = rowarray[0].innertext; var sum = 0; (j=1; j < rowarray.length; j++) { var checkbox = rowarray[j].children[0]; var checkedvalue = $('#'+checkbox.id+':checked').val(); if (checkedvalue === "1") { arrayinathletes[sum+1] = rowarray[j].children[0].id; sum += 1; } } athletes[i-1] = arrayinathletes; } </script>
i think looking code below (needs adapted example).
contact.create([ {first_name: 'ryan', last_name: 'smith', email: 'ryan@smith.com'}, {first_name: 'john', last_name: 'doe', email: 'john@doe.com'} ])
all need put data array of hashes. each hash object want save. batch insert, think want.
you need pull values checked/unchecked params since passed controller. cycle through hash , perform logic on that.
Comments
Post a Comment