在新服务器上重新安装Rails应用程序。应用程序的一部分可以根据用户选择的按钮分叉两个方向之一。这部分不起作用,当我查看日志时,我看到了我给表单的值, execept 为了 commit
params hash的一部分。这似乎是应用程序没有按预期工作的原因(因为没有任何内容 params[:commit]
,但我不知道为什么不会传递提交;请求肯定是一个POST请求,所有其他参数都在那里。
在新服务器上重新安装Rails应用程序。应用程序的一部分可以根据用户选择的按钮分叉两个方向之一。这部分不起作用,当我查看日志时,我看到了我给表单的值, execept 为了 commit
params hash的一部分。这似乎是应用程序没有按预期工作的原因(因为没有任何内容 params[:commit]
,但我不知道为什么不会传递提交;请求肯定是一个POST请求,所有其他参数都在那里。
有一个禁用按钮提交功能的类似问题。我们通过在提交表单之前添加具有相同名称和值的隐藏输入字段来解决它。
function disableButtonAndSubmit()
{
var input = $("<input type='hidden' />").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应为:
<input type="submit" name="commit" label="...>
我之前看过这样的事情,不同的浏览器如何传递表单上的提交按钮的值是不一致的。我发现唯一可行的解决方案是在按钮中设置一个隐藏字段的javascript,然后使用该值。
以下是我的一些代码,用于区分保存和退出,这是一种方式,另一种是保存和继续:
<%= hidden_field_tag 'step_commit', '' %>
<span style="float:left;">
<%=submit_tag 'Cancel', :name=>'cancel', :onclick=>"javascript:location.href='/';return false;" %>
<%=submit_tag 'Save and Exit', :name=>'exit', :onclick=>"javascript:$('step_commit').value='exit';" %>
</span>
<span style="float:right;">
<%=submit_tag 'Save and Continue', :name=>'continue', :onclick=>"javascript:$('step_commit').value='continue';" %>
</span>