Rails Check_Box_Tag Set Checked with Default Value

I currently have a rails check_box_tag call that looks like

check_box_tag #{name}

I want to include a checked attribute, which I know I can do with

check_box_tag name, value, checked

But what if I want to set it to checked without explicitly specifying value (I just want to use the default). Or similarly, what if I wanted to specify html options without specifying the checked attribute. Is there a way to do this?

2

6 Answers

Just wanted to update this. The third parameter for check_box_tag is a boolean value representing the checked status.

check_box_tag name, value, true
2

If you want the checkbox to be checked, then

check_box_tag name, value, {:checked => "checked"} 

otherwise

check_box_tag name, value

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

Examples:

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

There are no ways to do it directly. But the check_box_tag implementation is trivial, you can monkey patch it or create own helper.

Original implementation:

  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

If you pass in a value of "1" to the value field, it will pass-on the value of the real state of the checkbox, regardless of the checked default value:

is_checked = <default boolean>

check_box_tag :show_defaults, '1', is_checked

(now always reflects user input)

1

If anyone have column type boolean then look at this. is_checked? will be default boolean value. It worked for me.

<%= hidden_field_tag :name, 'false' %> <%= check_box_tag :name, true, is_checked? %>

1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Maya Lin-Takahashi

Maya Lin-Takahashi

Consumer Tech & Gadget Reviewer

Maya is a hardware enthusiast who tests and reviews smart home devices, smartphones, wearables, and audio gear. She focuses on practical consumer value and build quality.

Share this article
Twitter Facebook Pinterest