Check_box_tag входной идентификатор - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть 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="shipping_method_shipping_categories_"

заставляет меня ожидать идентификатор для этой конкретной категории shipping_calery.

У кого-нибудь из вас, ребята и девчонки, есть мысли по этому поводу?

Спасибо!

1 Ответ

0 голосов
/ 24 сентября 2018

Я не понимаю, почему у идентификатора нет «id», это означает, что подчеркивание в конце id = «shipping_method_shipping_categories_» заставляет меня ожидать идентификатор для этой конкретной 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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...