我有一个如下所示的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。
你们中的任何人和女孩对此都有想法吗?
谢谢!
答案 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" />