html - Check_box_tag 输入标识
问题描述
我有一个看起来像这样的 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。
你们中的任何人都对此有想法吗?
谢谢 !
解决方案
我不明白为什么 id 没有“id”,这意味着 id="shipping_method_shipping_categories_" 末尾的下划线让我期待这个特定 shipping_category 的 id。
这是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" />
推荐阅读
- express - 无法从 express/npm 模块中找到静态资产
- node.js - 建立数据库连接后如何获取所有文档
- android - Android Studio:膨胀类 android.support.design.widget.FloatingActionButton 时出错
- python-3.x - Google Cloud Speech to Text 中的 enable_speaker_diarization 标记出错
- python - Scrapy 将动态项目导出到 csv
- c++ - 这个 OpenFST 函数中的 `Read` 来自哪里?
- c# - 如何在 F# 中实例化类及其属性
- c - 为什么相同代码在同一台计算机上的执行时间可能不同?
- audio - C++:如何捕获声卡的输出?
- git - 我需要什么 git 命令来保持干净的提交历史?