为什么下面的工作来纠正禁用表单中的单选按钮:
<%= 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
型
2条答案
按热度按时间ztmd8pv51#
在Ruby中调用一个方法说“哦,这是一个散列,所以我将把它移到第四个参数”并没有什么魔力。在第二个例子中,你有三个参数:
'set_editor'
个{ checked: false, disabled: true }
个因此,它们被分配给
radio_button_tag
方法调用中的前三个参数,即。name = 'set_creation_radio'
个value = 'set_editor'
个checked = { checked: false, disabled: true }
个esbemjvw2#
在第一个范例中,false值会明确传递为checked参数,而disabled变数则会解译为options参数。这意味着disabled将被视为一个单独的参数,并与默认选项散列(在本例中为空)合并。
但在第二个示例中,选中了:false和已禁用:true作为单个散列参数传递给options参数。在这种情况下,选项包括选中的键和禁用的键。
在第一个范例中,已核取的值会明确设定为false,因此它会维持false,而不会被覆写。但在第二个示例中,checked作为选项散列的一部分包含在内,因此它从那里取false值。要修复第二个示例,请执行以下操作:
字符串