Rails 4:link_to使用ajax提交表单,如何模仿帖子请求?

时间:2013-08-19 20:34:47

标签: ruby-on-rails ruby post put link-to

在我的rails应用程序中,我希望通过执行ajax请求并将项目ID添加到数据库,可以隐藏墙上的任何内容。

以下是我想模仿以下内容的请求:

Started POST "/report_fixed_vulns" for 127.0.0.1 at 2013-08-19 21:28:45 +0100
Processing by ReportFixedVulnsController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxx", "report_fixed_vuln"=>{"report_id"=>"2", "vuln_id"=>"2", "user_id"=>"2"}, "commit"=>"Create Report fixed vuln"}

我尝试使用以下代码执行此操作。

<%= button_to 'Submit', report_fixed_vuln_path(:report_fixed_vuln => {:report_id => @report_id, :vuln_id => plugin.first.id, :user_id => current_user.id}), :remote => true, :method => :put %>

然而,这会产生不同的请求:

Started PUT "/report_fixed_vulns/323?report_fixed_vuln%5Breport_id%5D=323&report_fixed_vuln%5Buser_id%5D=1&report_fixed_vuln%5Bvuln_id%5D=443" for 127.0.0.1 at 2013-08-19 21:32:51 +0100
Processing by ReportFixedVulnsController#update as JS
  Parameters: {"authenticity_token"=>"xxx", "report_fixed_vuln"=>{"report_id"=>"323", "user_id"=>"1", "vuln_id"=>"443"}, "id"=>"323"}

以下是我的问题:如何使用button_to模仿第一个请求(不需要输入参数 - 它们已经存在于页面上)

1 个答案:

答案 0 :(得分:3)

您应该参考此路线指南:

http://guides.rubyonrails.org/routing.html

它表示create方法的助手是:

POST    /admin/posts    create  admin_posts_path

所以你应该使用辅助report_fixed_vulns_path(注意复数)和相同的参数但method: :post(PUT用于更新),在你的情况下

<%= button_to 'Submit', report_fixed_vulns_path(:blabla => hash), :remote => true, :method => :post %>

如果要在单击按钮后立即隐藏按钮,可以添加onclick事件:(jQuery)

<%= button_to 'Submit', report_fixed_vulns_path(:blabla => hash), :remote => true, :method => :post, :onclick => '$(this).hide();' %>