Check_box_tag输入ID

时间:2018-09-24 14:02:23

标签: html ruby-on-rails checkbox collections

我有一个如下所示的check_box_tag:

check_box_tag('shipping_method[shipping_categories][]', category.id, 
@shipping_method.shipping_categories.include?(category))

在浏览器中检查输出时,我有以下内容:

<input id="shipping_method_shipping_categories_" 
name="shipping_method[shipping_categories][]" type="checkbox" value="1" />

我不知道为什么id没有“ id”,这意味着下划线要在

id="shipping_method_shipping_categories_"

让我期望这个特定的shipping_category有一个ID。

你们中的任何人和女孩对此都有想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

  

我不知道为什么id没有“ id”,这意味着   id =“ shipping_method_shipping_categories_”的结尾使我期望获得一个id   为此特定的shipping_category。

这是check_box_tag的默认行为。换句话说,它是按这种方式构造的。当您查看其构造代码时,将看到以下内容

# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 374
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

因此,"id"是用方法sanitize_to_id(name)构造的。因此,我进一步查看了sanitize_to_id(name)以查看其代码,并找到了它

def sanitize_to_id(name)
  name.to_s.delete("]").tr("^-a-zA-Z0-9:.", "_")
end

因此,shipping_method[shipping_categories][].to_s.delete("]").tr("^-a-zA-Z0-9:.", "_")返回shipping_method_shipping_categories_。这就解释了它的行为。

如果您想实现自己的期望,我建议您选择collection_check_boxes

例如,

collection_check_boxes(:post, :author_ids, Author.all, :id, :name_with_initial)

返回

<input id="post_author_ids_1" name="post[author_ids][]" type="checkbox" value="1" checked="checked" />