ruby-on-rails – “表单提交”按钮仅在重新加载后才起作用

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – “表单提交”按钮仅在重新加载后才起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个建立表的索引页,我试图允许用户在表中编辑行.我试图以最基本的方式这样做 – 没有 javascript,ajax等,除非Rails提供它.

我的表在索引方法显示正常,并且有一个表格作为表中的最后一行,可用于添加新行.新表格工作正常.每行都有一个编辑链接,路由到控制器的编辑方法.控制器设置要编辑的对象,并使用要编辑的行中的表单呈现索引.我的问题是这个表单不会提交,但如果我刷新页面,它将提交.

页面将在刷新后提交的事实非常混乱.我不会看到刷新会做什么不同,然后点击链接(它仍然应该通过相同的路由,相同的变量是正确的),我看不到在刷新之前和之后的形式的任何区别.有什么想法可能发生什么?

我不知道什么代码甚至开始寻找,但在这里;

index.html.erb

  1. ...
  2. <tbody>
  3. <% @boms.each do |line| %>
  4. <% if line == @bom %>
  5. <%= render("form_in_table",form_objects: @bom,button_text: "Update") %>
  6. <% else %>
  7. <%= render("bom_in_table",line: line) %>
  8. <% end %>
  9. <% end %>
  10. <% if @bom.new_record? %>
  11. <%= render("form_in_table",form_objects: [@li,@bom],button_text: "Add") %>
  12. <% end %>
  13. </tbody>
  14. ...

_form_in_table.html.erb

  1. <%= form_for(form_objects,html: {class: "form-in-table"}) do |f| %>
  2. <tr>
  3. <td><%= f.text_field :quantity %></td>
  4. <td colspan="2">
  5. <%= f.select(:part_id,options_from_collection_for_select(@parts,:id,:pricebook_name),prompt: "Select a Part",) %></td>
  6. <td></td>
  7. <td></td>
  8. <td></td>
  9. <td><%= f.submit(button_text,class: "btn btn-primary btn-mini") %></td>
  10. </tr>
  11. <% end %>

_bom_in_table.html.erb

  1. <tr>
  2. <td><%= line.quantity%></td>
  3. <td><%= line.part_number %></td>
  4. <td><%= line.part_description %></td>
  5. <td><%= number_to_currency(line.part_cost) %></td>
  6. <td><%= line.part_unit %></td>
  7. <td><%= number_to_currency(line.extension) %></td>
  8. <td><%= link_to('Edit',edit_bom_path(line)) %></td>
  9. </tr>

boms_controller.rb

  1. ...
  2. def edit
  3. @bom = Bom.find(params[:id])
  4. @li = @bom.line_item
  5. @boms = @li.boms.sorted_by_part_number
  6. @parts = Part.sorted_by_number
  7. render 'index'
  8. end
  9. ...

如果这对解密代码/意图很有用,我有一些line_items,part和boms的集合; line_item有很多boms,而line_item有很多部分通过boms.除了零件/订单项关系外,bom有一个数量. BOM是材料清单的缩写. @li是被操纵的line_item.我遇到的形式是查看/添加/编辑属于订单项的bom(数量和部分)的集合.

添加日志

  1. Started GET "/line_items/8/boms" for 127.0.0.1 at 2013-10-14 14:27:27 -0400
  2. Processing by BomsController#index as HTML
  3. Parameters: {"line_item_id"=>"8"}
  4. [1m[35mLineItem Load (0.0ms)[0m SELECT "line_items".* FROM "line_items" WHERE "line_items"."id" = ? LIMIT 1 [["id","8"]]
  5. [1m[36mLineItemSubClass Load (1.0ms)[0m [1mSELECT "line_item_sub_classes".* FROM "line_item_sub_classes" WHERE "line_item_sub_classes"."id" = ? ORDER BY "line_item_sub_classes"."id" ASC LIMIT 1[0m [["id",8]]
  6. [1m[35mLineItemClass Load (4.0ms)[0m SELECT "line_item_classes".* FROM "line_item_classes" WHERE "line_item_classes"."id" = ? ORDER BY "line_item_classes"."id" ASC LIMIT 1 [["id",1]]
  7. Rendered shared/_error_messages.html.erb (3.0ms)
  8. [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]]
  9. [1m[35mPart Load (0.0ms)[0m SELECT "parts".* FROM "parts" WHERE "parts"."id" = ? ORDER BY "parts"."id" ASC LIMIT 1 [["id",1]]
  10. Rendered boms/_bom_in_table.html.erb (96.0ms)
  11. [1m[36mPart Load (1.0ms)[0m [1mSELECT "parts".* FROM "parts" ORDER BY "parts".number ASC[0m
  12. Rendered boms/_form_in_table.html.erb (103.0ms)
  13. [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
  14. Rendered boms/index.html.erb within layouts/boms (477.0ms)
  15. Rendered layouts/_shim.html.erb (1.0ms)
  16. Rendered layouts/_header.html.erb (0.0ms)
  17. Rendered layouts/_footer.html.erb (0.0ms)
  18. Rendered layouts/application.html.erb (69.0ms)
  19. Completed 200 OK in 671ms (Views: 601.0ms | ActiveRecord: 31.0ms)
  20.  
  21.  
  22. Started GET "/boms/22/edit" for 127.0.0.1 at 2013-10-14 14:28:13 -0400
  23. Processing by BomsController#edit as HTML
  24. Parameters: {"id"=>"22"}
  25. [1m[36mBom Load (0.0ms)[0m [1mSELECT "boms".* FROM "boms" WHERE "boms"."id" = ? LIMIT 1[0m [["id","22"]]
  26. [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]]
  27. [1m[36mLineItemSubClass Load (1.0ms)[0m [1mSELECT "line_item_sub_classes".* FROM "line_item_sub_classes" WHERE "line_item_sub_classes"."id" = ? ORDER BY "line_item_sub_classes"."id" ASC LIMIT 1[0m [["id",8]]
  28. [1m[35mLineItemClass Load (0.0ms)[0m SELECT "line_item_classes".* FROM "line_item_classes" WHERE "line_item_classes"."id" = ? ORDER BY "line_item_classes"."id" ASC LIMIT 1 [["id",1]]
  29. Rendered shared/_error_messages.html.erb (0.0ms)
  30. [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]]
  31. [1m[35mPart Load (0.0ms)[0m SELECT "parts".* FROM "parts" ORDER BY "parts".number ASC
  32. Rendered boms/_form_in_table.html.erb (25.0ms)
  33. [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
  34. Rendered boms/index.html.erb within layouts/boms (41.0ms)
  35. Rendered layouts/_shim.html.erb (0.0ms)
  36. Rendered layouts/_header.html.erb (1.0ms)
  37. Rendered layouts/_footer.html.erb (0.0ms)
  38. Rendered layouts/application.html.erb (54.0ms)
  39. Completed 200 OK in 113ms (Views: 104.0ms | ActiveRecord: 3.0ms)
  40.  
  41.  
  42. Started GET "/boms/22/edit" for 127.0.0.1 at 2013-10-14 14:28:37 -0400
  43. Processing by BomsController#edit as HTML
  44. Parameters: {"id"=>"22"}
  45. [1m[35mBom Load (0.0ms)[0m SELECT "boms".* FROM "boms" WHERE "boms"."id" = ? LIMIT 1 [["id","22"]]
  46. [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]]
  47. [1m[35mLineItemSubClass Load (0.0ms)[0m SELECT "line_item_sub_classes".* FROM "line_item_sub_classes" WHERE "line_item_sub_classes"."id" = ? ORDER BY "line_item_sub_classes"."id" ASC LIMIT 1 [["id",8]]
  48. [1m[36mLineItemClass Load (1.0ms)[0m [1mSELECT "line_item_classes".* FROM "line_item_classes" WHERE "line_item_classes"."id" = ? ORDER BY "line_item_classes"."id" ASC LIMIT 1[0m [["id",1]]
  49. Rendered shared/_error_messages.html.erb (0.0ms)
  50. [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]]
  51. [1m[36mPart Load (0.0ms)[0m [1mSELECT "parts".* FROM "parts" ORDER BY "parts".number ASC[0m
  52. Rendered boms/_form_in_table.html.erb (5.0ms)
  53. [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
  54. Rendered boms/index.html.erb within layouts/boms (27.0ms)
  55. Rendered layouts/_shim.html.erb (1.0ms)
  56. Rendered layouts/_header.html.erb (8.0ms)
  57. Rendered layouts/_footer.html.erb (0.0ms)
  58. Rendered layouts/application.html.erb (60.0ms)
  59. Completed 200 OK in 131ms (Views: 94.0ms | ActiveRecord: 2.0ms)
  60.  
  61.  
  62. Started GET "/assets/application.css?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  63.  
  64.  
  65. Started GET "/assets/custom.css?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  66.  
  67.  
  68. Started GET "/assets/jquery.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  69.  
  70.  
  71. Started GET "/assets/jquery_ujs.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  72.  
  73.  
  74. Started GET "/assets/bootstrap-transition.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  75.  
  76.  
  77. Started GET "/assets/bootstrap-affix.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  78.  
  79.  
  80. Started GET "/assets/bootstrap-alert.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  81.  
  82.  
  83. Started GET "/assets/bootstrap-collapse.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  84.  
  85.  
  86. Started GET "/assets/bootstrap-modal.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:38 -0400
  87.  
  88.  
  89. Started GET "/assets/bootstrap-carousel.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  90.  
  91.  
  92. Started GET "/assets/bootstrap-button.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  93.  
  94.  
  95. Started GET "/assets/bootstrap-dropdown.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  96.  
  97.  
  98. Started GET "/assets/bootstrap-scrollspy.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  99.  
  100.  
  101. Started GET "/assets/bootstrap-tab.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  102.  
  103.  
  104. Started GET "/assets/bootstrap-typeahead.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  105.  
  106.  
  107. Started GET "/assets/bootstrap-tooltip.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  108.  
  109.  
  110. Started GET "/assets/bootstrap-popover.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  111.  
  112.  
  113. Started GET "/assets/bootstrap.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  114.  
  115.  
  116. Started GET "/assets/turbolinks.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  117.  
  118.  
  119. Started GET "/assets/parts.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400
  120.  
  121.  
  122. Started GET "/assets/application.js?body=1" for 127.0.0.1 at 2013-10-14 14:28:39 -0400

解决方法

我相信这是一个HTML问题,而不是Rails问题.根据这个讨论 Form inside a table,< form>不能放在< table>或< tbody>或< tr&gt ;.移动< form>包装桌子并将控件放在相应的< td>表单工作.

我仍然不明白为什么刷新页面使表单工作,但…

猜你在找的Ruby相关文章