在我的表单中,我想忽略表单提交上的一些输入字段。
我使用prop('disabled', true)
来禁用字段,但它们仍然被提交
这只发生在远程表单上。它可能是什么?
我使用turbolinks,rails和jquery
在这种情况下,将远程表单转换为常规整页重新加载(模态和内容)
答案 0 :(得分:0)
不要直接访问params,你想要对它们进行清理,这里有一些伪代码的例子,假设你只想要评论标题&身体(所有其他参数将被清除):
class CommentController < ApplicationController
def create
Comment.create(comment_params)
end
private
def comment_params
params.require(:comment).permit(:title, :body)
end
end
答案 1 :(得分:0)
我遇到了完全相同的问题(需要根据用户交互禁用和启用某些字段)。使用分支5-1-stable
解决了这个问题。 (之前是5.1.2
)
gem 'rails', git: 'https://github.com/rails/rails.git', branch: '5-1-stable'
并更新您的Rails gem
bundle update rails
这pull request解决了这个问题。
注意:我正在处理的应用程序尚未投入生产,因此我现在在使用stable
分支时没有任何问题。如果您需要更保守的方法,可以尝试使用5.1.4
代替,并检查上述链接中的提交是否包含在回购中。
如果您无法更改rails gem版本,另一种解决方案可能是删除或清空您不具有的输入的name
属性
想要提交。如果您检查提取请求中的更改,则可以看到当前rails-ujs
正在从params
那些没有name
属性的字段中删除。因此,根据需要在字段中删除/设置此属性应该可行(尽管我没试过)。也许是这样的:
// 'disable' the fields
$('your-inputs-selector[disabled="disabled"]').each(function(idx, elem) {
var $elem = $(elem);
$elem.data('input-name', $elem.attr('name'));
$(elem).attr('name', '');
});
// 're-enable' the fields
$('your-inputs-selector').each(function(idx, elem) {
var $elem = $(elem)
$elem.attr('name', $elem.data('input-name'));
});
希望得到这个帮助。