Rails没有传递“commit”按钮参数

在新服务器上重新安装Rails应用程序。 应用程序的一部分可以根据用户选择的按钮分叉两个方向之一。 这部分不起作用,当我查看日志时,我看到我给表单的值, 除了 params哈希的commit部分。 这似乎是应用程序没有按预期工作的原因(因为params[:commit]没有任何内容,但我不知道为什么不会传入提交;请求绝对是POST请求,而所有其他参数在那里。

有一个禁用按钮提交function的类似问题。 我们通过在提交表单之前添加具有相同名称和值的隐藏输入字段来解决它。

 function disableButtonAndSubmit() { var input = $("").attr("name", $(this)[0].name).attr("value", $(this)[0].value); $(this).closest('form').append(input); $(this).attr('disabled', 'disabled').html('Loading…'); $(this).closest('form').submit(); } $('#somewhere button').click(disableButtonAndSubmit); 

只需添加name: "commit", value: "Save"到表单提交按钮:

 form_for @object do |f| ... f.button :submit, "Save", name: "commit", value:"Save" end 

然后你会在控制器中将params[:commit]等于"Save"

我遇到了同样的问题,这里的答案指出了我正确的方向。 但是,不是建议添加隐藏的表单输入或放弃双提交块,您只需在双提交块上添加一个setTimeout函数,超时为1毫秒,这样可以使双提交块无需阻止提交按钮。

检查您的提交输入是否已命名为commit,否则将不会发送其标签。

生成的html应为:

 
		      	

我之前看过这样的事情,不同的浏览器如何传递表单上的提交按钮的值是不一致的。 我发现唯一可行的解​​决方案是在按钮中设置一个隐藏字段的javascript,然后使用该值。

以下是我的一些代码,用于区分保存和退出,这是一种方式,另一种是保存和继续:

  <%= hidden_field_tag 'step_commit', '' %>  <%=submit_tag 'Cancel', :name=>'cancel', :onclick=>"javascript:location.href='/';return false;" %> <%=submit_tag 'Save and Exit', :name=>'exit', :onclick=>"javascript:$('step_commit').value='exit';" %>   <%=submit_tag 'Save and Continue', :name=>'continue', :onclick=>"javascript:$('step_commit').value='continue';" %>