为什么要正确禁用表单中的单选按钮,请执行以下操作:

<%= radio_button_tag 'set_creation_radio', 'set_editor', false, disabled: true %>

但这不是(请注意添加了关键字参数checked):

<%= radio_button_tag 'set_creation_radio', 'set_editor', checked: false, disabled: true %>

在此位置使用断点时,checked在第一个(即正常工作的)实例中生成以下输出:

0> checked
=> true

而第二个似乎将两个关键字都解释为一个参数:

0> checked
=> {:checked=>true, :disabled=>true}

这是radio_button_tag的源代码,我不明白为什么在我的示例中checked会被解释为散列:

      def radio_button_tag(name, value, checked = false, options = {})
        html_options = { "type" => "radio", "name" => name, "id" => "#{sanitize_to_id(name)}_#{sanitize_to_id(value)}", "value" => value }.update(options.stringify_keys)
        html_options["checked"] = "checked" if checked
        tag :input, html_options
      end

推荐答案

在第一个示例中,将FALSE值显式地作为选中的参数传递,而将禁用的变量解释为选项参数.这意味着DISABLED将被视为单独的参数,并与默认选项散列(在本例中为空)合并.

但在第二个示例中,Checked:False和Disable:True被作为单个散列参数传递给Options参数.在这种情况下,选项既包括选中的键,也包括禁用的键.

在第一个示例中,选中的值被显式设置为FALSE,因此它保持为FALSE并且不被覆盖.但在第二个示例中,Checked作为选项散列的一部分包括在内,因此它从那里获取值False.要修复第二个示例,请执行以下操作:

<%= radio_button_tag 'set_creation_radio', 'set_editor', false, disabled: true %>

Ruby-on-rails相关问答推荐

发送不调用类或模块中的私有方法

Rails ActiveRecord::LogSubscriber 不输出详细查询日志(log)

Ruby Hash 中 tap / delete 和 except 的区别

has_many 通过大小验证

如何在生成的 HTML 本身中显示部分名称

在 Ruby on Rails html.erb 文件中循环

Ruby的自动代码质量工具?

有没有办法在模型而不是视图中使用复数()?

使用devise gem点击确认链接后避免登录?

未定义的方法 attr_accessible

如何解决弃用警告方法 to_hash 已弃用并将在 Rails 5.1 中删除

Rails 错误:无法批量分配受保护的属性

带有 master.key 的 Rails 5.2 - Heroku 部署

在本地 Rails 开发环境中获取真实 IP 地址

Rails:仅在创建时验证,或者当字段不为空时在更新时验证

保存后重定向到索引而不是显示

find、where 和 find_by_id 有什么区别?

使用redirect_to后如何停止控制器执行? (使用导轨)

Ruby on Rails Bootstrap Glyphicons 不工作

测试和规格有什么区别?