Method: ActionView::Helpers::FormTagHelper#field_id

Defined in:
actionview/lib/action_view/helpers/form_tag_helper.rb

#field_id(object_name, method_name, *suffixes, index: nil, namespace: nil) ⇒ Object

Generate an HTML id attribute value for the given name and field combination

Return the value generated by the FormBuilder for the given attribute name.

<%= label_tag :post, :title %>
<%= text_field :post, :title, aria: { describedby: field_id(:post, :title, :error) } %>
<%= tag.span("is blank", id: field_id(:post, :title, :error) %>

In the example above, the <input type="text"> element built by the call to text_field declares an aria-describedby attribute referencing the <span> element, sharing a common id root (post_title, in this case).



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
# File 'actionview/lib/action_view/helpers/form_tag_helper.rb', line 102

def field_id(object_name, method_name, *suffixes, index: nil, namespace: nil)
  if object_name.respond_to?(:model_name)
    object_name = object_name.model_name.singular
  end

  sanitized_object_name = object_name.to_s.gsub(/\]\[|[^-a-zA-Z0-9:.]/, "_").delete_suffix("_")

  sanitized_method_name = method_name.to_s.delete_suffix("?")

  [
    namespace,
    sanitized_object_name.presence,
    (index unless sanitized_object_name.empty?),
    sanitized_method_name,
    *suffixes,
  ].tap(&:compact!).join("_")
end