【问题标题】:Rails, how to submit disabled checkbox with true when checkedRails,如何在选中时提交禁用的复选框
【发布时间】:2015-08-11 13:09:43
【问题描述】:

我在使用禁用的复选框时遇到问题。

我尝试了两种方法。 第一:

= check_box "permissions", "permission_#{row}[create]", {checked: has_permission?(@user, permission, "create")}, 'true', 'false'

此复选框在视图内被禁用但也被选中,但提交时它在我的参数中的值如下所示:

"create"=>"false"

所以当我更新我的属性时,created 在我的参数中从 true 更改为 false。

如何将静止而不是false发送True,而不是错误,当检查禁用复选框时?

【问题讨论】:

  • 尝试第一个,将disabled 标志设置为true,如下所示:<%= check_box "permissions", "permission_#{row}[create]", {checked: has_permission?(@user, permission, "create")}, 'true', 'false', disabled: true %>。这可能会将其排除在您的参数之外。虽然没有保证
  • 参数中没有的复选框应被视为错误。仅在选中时才将其视为 true。
  • 当一个html表单域被禁用时,它不会返回给服务器,所以它只会返回隐藏域的值(这将是假的)如果你想返回true对于禁用的字段,您要么需要更新隐藏字段,要么拥有自己的隐藏字段以向您发送正确的值。

标签: html ruby-on-rails ruby-on-rails-4


【解决方案1】:

我想您首先禁用这些复选框的原因是为了将权限设置为只读。但是很容易通过浏览器调试工具从复选框中删除disabled标志,设置权限并提交。

因此,无论如何我都建议在将这些值从params 中删除,然后再交给模型,例如将它们从允许的参数中排除,或者发出splice

这样您仍将显示实际权限,但忽略任何未经授权更改它们的尝试。

【讨论】:

  • 在这种情况下,当我改用这一行时:%input{:name => "permissions[permission_#{row}][grant]", :type => "CHECKBOX", checked: has_permission?(@user, permission, "grant")} 我的禁用参数不会发送到我的参数中。太棒了!但它不会发送未选中的复选框值,如果用户正在删除权限,则需要该值。
  • 是否发送它们并没有太大的区别。恶意用户可以制作任何请求,因此您最好在服务器端做好准备。至于未发送的未经检查的值,在伪代码中想到的一种解决方案类似于:if user_has_permission_to_change?('permission_0[create]'); model.permitted = params['permission_0[create]']; end(抱歉,cmets 中没有花哨的格式)。这将阻止没有权限的用户更新值,但使复选框适用于有权更改权限的用户。
猜你喜欢
  • 2011-07-24
  • 2013-08-12
  • 1970-01-01
  • 2014-04-04
  • 2011-06-11
  • 1970-01-01
  • 2015-09-30
  • 2013-01-19
  • 1970-01-01
相关资源
最近更新 更多