Rails中如何设置默认选中的check_box_tag?

24

我目前有一个Rails的check_box_tag调用,看起来像这样:

check_box_tag #{name}

我想要添加一个checked属性,我知道可以使用下面的代码实现:

check_box_tag name, value, checked

但是如果我想设置它为已选中状态而不显式指定value(我只想使用默认值),该怎么办呢?或者类似地,如果我想指定html选项而不指定checked属性,有没有一种方法可以实现这个功能呢?


我不明白为什么你不想设置一个值。你能给一个使用案例吗? - Dougui
或者,就算我不明确指定选中状态(我只是想使用默认值),也希望设置一个HTML属性 - 我认为这仍然会遇到同样的问题。 - Jeff Storey
6个回答

19

我想更新一下这个内容。 check_box_tag 的第三个参数是一个布尔值,表示选中的状态。

check_box_tag name, value, true

3
在这种情况下,“value”是什么意思? - Akron
1
@Akron 我也有同样的问题!所以我问了一下,答案在这里:这里这里 - stevec

8

check_box_tag(name, value = "1", checked = false, options = {})

示例:

check_box_tag 'receive_email', 'yes', true
# => <input checked="checked" id="receive_email" name="receive_email" type="checkbox" value="yes" />

check_box_tag 'tos', 'yes', false, class: 'accept_tos'
# => <input class="accept_tos" id="tos" name="tos" type="checkbox" value="yes" />

check_box_tag 'eula', 'accepted', false, disabled: true
# => <input disabled="disabled" id="eula" name="eula" type="checkbox" value="accepted" />

api.rubyonrails.org


8
如果您想要复选框被选中,则
check_box_tag name, value, {:checked => "checked"} 

否则
check_box_tag name, value

4

没有直接的方法来实现它。但是check_box_tag的实现是微不足道的,你可以使用猴子补丁或创建自己的辅助函数。

原始实现:

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

4
如果您在值字段中传入“1”的值,它将传递复选框的实际状态值,而不管默认选中的值是什么:
is_checked = <default boolean>

check_box_tag :show_defaults, '1', is_checked

(现在始终反映用户输入)


有没有办法防止复选框将状态与值一起传递?我得到了一个预期的值数组,但也得到了单词“on”。 - pinkfloyd90

2
如果有任何人使用布尔列类型,请查看以下内容。is_checked? 将是默认的布尔值。这对我很有效。 <%= hidden_field_tag :name, 'false' %> <%= check_box_tag :name, true, is_checked? %>

1
通过使用这种技术,DOM 会生成关于两个具有相同 ID 的元素的错误。 - M. Habib

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接