Il pulsante Invia modulo funziona solo dopo il ricaricamento

Ho una pagina indice che costruisce una tabella e sto cercando di consentire agli utenti di modificare le linee nella tabella. Sto cercando di farlo nel modo più semplice ansible – no javascript, ajax, ecc, a meno che Rails lo stia fornendo.

Ho la mia tabella visualizzata bene nel metodo indice, e c’è un modulo come ultima riga nella tabella che può essere utilizzata per aggiungere una nuova riga. Il nuovo modulo funziona bene. Ogni riga ha un collegamento di modifica che indirizza al metodo di modifica del controllore. Il controller imposta l’object da modificare e rende l’indice, questa volta con un modulo nella riga che deve essere modificato. Il mio problema è che questo modulo non verrà inviato, ma se aggiornerò la pagina verrà inviata.

Il fatto che la pagina venga inviata dopo un aggiornamento è molto confuso. Non vedo come un aggiornamento farebbe qualcosa di diverso, quindi fare clic sul link (dovrebbe ancora passare attraverso lo stesso routing, con le stesse variabili vero?) E non vedo alcuna differenza nel formato html prima e dopo l’aggiornamento . Qualche idea su cosa potrebbe accadere?

Non sono sicuro di quale codice iniziare a guardare, ma qui va;

index.html.erb

...             ... 

_form_in_table.html.erb

            

_bom_in_table.html.erb

          

boms_controller.rb

 ... def edit @bom = Bom.find(params[:id]) @li = @bom.line_item @boms = @li.boms.sorted_by_part_number @parts = Part.sorted_by_number render 'index' end ... 

Nel caso questo sia utile per decifrare il codice / l’intento, ho raccolte di line_items, parti e boms; line_item ha molti boms e line_item ha molte parti attraverso le boms. Oltre alla relazione parte / elemento, le bom hanno una quantità. Bom è l’abbreviazione di distinta base. @li è il line_item che viene manipolato. Il modulo con cui ho problemi è per visualizzare / aggiungere / modificare la raccolta di boms (quantità e parti) che appartengono a un elemento pubblicitario.

AGGIUNTA DEI LOG

 Started GET "/line_items/8/boms" for 127.0.0.1 at 2013-10-14 14:27:27 -0400 Processing by BomsController#index as HTML Parameters: {"line_item_id"=>"8"} [1m[35mLineItem Load (0.0ms)[0m SELECT "line_items".* FROM "line_items" WHERE "line_items"."id" = ? LIMIT 1 [["id", "8"]] [1m[36mLineItemSubClass Load (1.0ms)[0m [1mSELECT "line_item_sub_classs".* FROM "line_item_sub_classs" WHERE "line_item_sub_classs"."id" = ? ORDER BY "line_item_sub_classs"."id" ASC LIMIT 1[0m [["id", 8]] [1m[35mLineItemClass Load (4.0ms)[0m SELECT "line_item_classs".* FROM "line_item_classs" WHERE "line_item_classs"."id" = ? ORDER BY "line_item_classs"."id" ASC LIMIT 1 [["id", 1]] Rendered shared/_error_messages.html.erb (3.0ms) [1m[36mBom Load (1.0ms)[0m [1mSELECT "boms".* FROM "boms" INNER JOIN "parts" ON "parts"."id" = "boms"."part_id" WHERE "boms"."line_item_id" = ? ORDER BY "parts".number ASC[0m [["line_item_id", 8]] [1m[35mPart Load (0.0ms)[0m SELECT "parts".* FROM "parts" WHERE "parts"."id" = ? ORDER BY "parts"."id" ASC LIMIT 1 [["id", 1]] Rendered boms/_bom_in_table.html.erb (96.0ms) [1m[36mPart Load (1.0ms)[0m [1mSELECT "parts".* FROM "parts" ORDER BY "parts".number ASC[0m Rendered boms/_form_in_table.html.erb (103.0ms) [1m[35m (24.0ms)[0m SELECT SUM(quantity * cost) AS sum_id FROM "parts" INNER JOIN "boms" ON "boms"."part_id" = "parts"."id" WHERE "boms"."line_item_id" = 8 Rendered boms/index.html.erb within layouts/boms (477.0ms) Rendered layouts/_shim.html.erb (1.0ms) Rendered layouts/_header.html.erb (0.0ms) Rendered layouts/_footer.html.erb (0.0ms) Rendered layouts/application.html.erb (69.0ms) Completed 200 OK in 671ms (Views: 601.0ms | ActiveRecord: 31.0ms) Started GET "/boms/22/edit" for 127.0.0.1 at 2013-10-14 14:28:13 -0400 Processing by BomsController#edit as HTML Parameters: {"id"=>"22"} [1m[36mBom Load (0.0ms)[0m [1mSELECT "boms".* FROM "boms" WHERE "boms"."id" = ? LIMIT 1[0m [["id", "22"]] [1m[35mLineItem Load (1.0ms)[0m SELECT "line_items".* FROM "line_items" WHERE "line_items"."id" = ? ORDER BY "line_items"."id" ASC LIMIT 1 [["id", 8]] [1m[36mLineItemSubClass Load (1.0ms)[0m [1mSELECT "line_item_sub_classs".* FROM "line_item_sub_classs" WHERE "line_item_sub_classs"."id" = ? ORDER BY "line_item_sub_classs"."id" ASC LIMIT 1[0m [["id", 8]] [1m[35mLineItemClass Load (0.0ms)[0m SELECT "line_item_classs".* FROM "line_item_classs" WHERE "line_item_classs"."id" = ? ORDER BY "line_item_classs"."id" ASC LIMIT 1 [["id", 1]] Rendered shared/_error_messages.html.erb (0.0ms) [1m[36mBom Load (1.0ms)[0m [1mSELECT "boms".* FROM "boms" INNER JOIN "parts" ON "parts"."id" = "boms"."part_id" WHERE "boms"."line_item_id" = ? ORDER BY "parts".number ASC[0m [["line_item_id", 8]] [1m[35mPart Load (0.0ms)[0m SELECT "parts".* FROM "parts" ORDER BY "parts".number ASC Rendered boms/_form_in_table.html.erb (25.0ms) [1m[36m (0.0ms)[0m [1mSELECT SUM(quantity * cost) AS sum_id FROM "parts" INNER JOIN "boms" ON "boms"."part_id" = "parts"."id" WHERE "boms"."line_item_id" = 8[0m Rendered boms/index.html.erb within layouts/boms (41.0ms) Rendered layouts/_shim.html.erb (0.0ms) Rendered layouts/_header.html.erb (1.0ms) Rendered layouts/_footer.html.erb (0.0ms) Rendered layouts/application.html.erb (54.0ms) Completed 200 OK in 113ms (Views: 104.0ms | ActiveRecord: 3.0ms) Started GET "/boms/22/edit" for 127.0.0.1 at 2013-10-14 14:28:37 -0400 Processing by BomsController#edit as HTML Parameters: {"id"=>"22"} [1m[35mBom Load (0.0ms)[0m SELECT "boms".* FROM "boms" WHERE "boms"."id" = ? LIMIT 1 [["id", "22"]] [1m[36mLineItem Load (0.0ms)[0m [1mSELECT "line_items".* FROM "line_items" WHERE "line_items"."id" = ? ORDER BY "line_items"."id" ASC LIMIT 1[0m [["id", 8]] [1m[35mLineItemSubClass Load (0.0ms)[0m SELECT "line_item_sub_classs".* FROM "line_item_sub_classs" WHERE "line_item_sub_classs"."id" = ? ORDER BY "line_item_sub_classs"."id" ASC LIMIT 1 [["id", 8]] [1m[36mLineItemClass Load (1.0ms)[0m [1mSELECT "line_item_classs".* FROM "line_item_classs" WHERE "line_item_classs"."id" = ? ORDER BY "line_item_classs"."id" ASC LIMIT 1[0m [["id", 1]] Rendered shared/_error_messages.html.erb (0.0ms) [1m[35mBom Load (1.0ms)[0m SELECT "boms".* FROM "boms" INNER JOIN "parts" ON "parts"."id" = "boms"."part_id" WHERE "boms"."line_item_id" = ? ORDER BY "parts".number ASC [["line_item_id", 8]] [1m[36mPart Load (0.0ms)[0m [1mSELECT "parts".* FROM "parts" ORDER BY "parts".number ASC[0m Rendered boms/_form_in_table.html.erb (5.0ms) [1m[35m (0.0ms)[0m SELECT SUM(quantity * cost) AS sum_id FROM "parts" INNER JOIN "boms" ON "boms"."part_id" = "parts"."id" WHERE "boms"."line_item_id" = 8 Rendered boms/index.html.erb within layouts/boms (27.0ms) Rendered layouts/_shim.html.erb (1.0ms) Rendered layouts/_header.html.erb (8.0ms) Rendered layouts/_footer.html.erb (0.0ms) Rendered layouts/application.html.erb (60.0ms) Completed 200 OK in 131ms (Views: 94.0ms | ActiveRecord: 2.0ms) Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/custom.css?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/bootstrap-transition.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/bootstrap-affix.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/bootstrap-alert.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/bootstrap-modal.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400 Started GET "/assets/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-button.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-dropdown.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-scrollspy.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-tab.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-typeahead.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-tooltip.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap-popover.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/turbolinks.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/parts.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400 

Credo che questo sia un problema HTML, non un problema di Rails. Per questa discussione Form all’interno di una tabella ,

non può essere inserito in

o

o

. Dopo aver spostato il

per avvolgere la tabella e mettere i controlli all’interno del rispettivo

il modulo funziona.

Continuo a non capire perché l’aggiornamento della pagina abbia funzionato, ma …

Se è Rails 4, probabilmente è a causa di Turbolinks. Prova a mettere

 data-no-turbolink="true" inside your body tag 

Potrebbe funzionare, è successo una volta per me.

Questo tipo di errore è più frequentemente generato da un HTML non valido. Varie fonti di errori possono essere:

  • mancante < o >
  • Tag HTML non chiuso
  • tag di chiusura HTML orfano (in cui non è associato alcuno di apertura); in forms complesse ho avuto extra s mentendo su ...
  • I form annidati all'interno di tag table o tr (all'interno di td è permesso)

Gli aiutanti del modulo devono essere nidificati correttamente, altrimenti queste stranezze ti morderanno ...

Prova a inserire data-no-turbolink = “true” nel link che ha chiamato la tabella.

   

Questo funziona da me.

Per le rotaie 5, prova a utilizzare i data: { turbolinks: false } all’interno di qualsiasi link alla pagina che contiene il modulo.

Ad esempio <%= link_to "Get in Touch", 'contact', data: { turbolinks: false } %>