Rails路由执行两次

Rails route executing twice

本文关键字:两次 路由 执行 Rails      更新时间:2023-09-26

我在轨道上的路由是每次点击执行两次。首先,路由如下-(它是集合中执行两次的print_cert路由):

 resources :acd_certificates, only: [:edit, :update] do
    collection do
      get :print_cert, defaults: { format: 'pdf' }
    end
  end

从编辑表单中调用:

  <div class="form-actions">
    <%= f.submit "Save Certificate", class: "btn btn-primary" %>
    <%= link_to print_cert_acd_certificates_path, class: "btn btn-primary" do %>
     <span class="glyphicon glyphicon-print"></span> Print
    <% end %>
    <%= link_to 'Cancel', @client, :class => 'btn' %>
  </div>

该控制器中没有其他路由以相同的方式响应。表单上没有javascript(并且表单不是部分)或在单独的js或coffee文件中。该应用程序确实在几个位置使用了jQuery,但不是在add_certificates单元中的任何位置。

我从控制器方法print_cert中剥离了所有代码,它仍然调用两次。

感谢您的帮助。

编辑添加日志输出:

Started GET "/acd_certificates/print_cert" for 73.48.173.116 at 2015-10-01 22:32:36 +0000
Processing by AcdCertificatesController#print_cert as PDF
  User Load (0.5ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
Sent file /home/ubuntu/workspace/tmp/pdfs/b6cda84f-da89-460d-976a-af863def9161.pdf (0.3ms)
Completed 200 OK in 186ms (ActiveRecord: 0.5ms)

Started GET "/acd_certificates/print_cert" for 73.48.173.116 at 2015-10-01 22:32:37 +0000
Processing by AcdCertificatesController#print_cert as PDF
  User Load (0.8ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1  ORDER BY "users"."id" ASC LIMIT 1  [["id", 1]]
Sent file /home/ubuntu/workspace/tmp/pdfs/b1348c24-bec7-442c-8b1f-0927e82ffe93.pdf (0.2ms)
Completed 200 OK in 188ms (ActiveRecord: 0.8ms)

OK,怀疑与JS和turbo链接的使用有关。我将data-no-turbolink添加到调用两次的打印链接中,问题就解决了。使用JS时要记住的一件好事。我没有将JS添加到这个表单中,但它从索引表单中执行,尽管它来自不同的单元。

谢谢rdnewman ! !