Spec-Zone.ru › Ruby on Rails 7.2

модуль ActionView::Helpers::FormTagHelper

Включенные модули:
ActionView::Helpers::UrlHelper, ActionView::Helpers::TextHelper, ActionView::Helpers::ContentExfiltrationPreventionHelper

Справочник по тегам форм Action View

Предоставляет ряд методов для создания тегов форм, которые не зависят от объекта Active Record, присвоенного шаблону, как это делает FormHelper. Вместо этого вы вручную указываете имена и значения.

ПРИМЕЧАНИЕ: HTML-опции disabled, readonly, и multiple могут быть интерпретированы как булевы значения. Поэтому указание disabled: true даст disabled="disabled".

Публичные методы экземпляра

button_tag(content_or_options = nil, options = nil, &block) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 566
def button_tag(content_or_options = nil, options = nil, &block)
  if content_or_options.is_a? Hash
    options = content_or_options
  else
    options ||= {}
  end

  options = { "name" => "button", "type" => "submit" }.merge!(options.stringify_keys)

  if block_given?
    content_tag :button, options, &block
  else
    content_tag :button, content_or_options || "Button", options
  end
end

Создаёт элемент кнопки, определяющий кнопку типа submit, reset или общую кнопку, которая может быть использована в JavaScript, например. Вы можете использовать тег кнопки как обычный тег отправки, но он не поддерживается в устаревших браузерах. Однако тег кнопки позволяет использовать более богатые метки, такие как изображения и выделение, поэтому этот помощник также примет блок. По умолчанию он создаст тег кнопки с типом submit, если тип не указан.

Параметры

  • :data - Этот параметр можно использовать для добавления пользовательских атрибутов данных.

  • :disabled - Если true, пользователь не сможет использовать этот элемент ввода.

  • Любой другой ключ создаёт стандартные HTML-параметры для тега.

Примеры

button_tag
# => <button name="button" type="submit">Button</button>

button_tag 'Reset', type: 'reset'
# => <button name="button" type="reset">Reset</button>

button_tag 'Button', type: 'button'
# => <button name="button" type="button">Button</button>

button_tag 'Reset', type: 'reset', disabled: true
# => <button name="button" type="reset" disabled="disabled">Reset</button>

button_tag(type: 'button') do
  content_tag(:strong, 'Ask me!')
end
# => <button name="button" type="button">
#     <strong>Ask me!</strong>
#    </button>
check_box_tag(name, options = {}) Показать исходный код
check_box_tag(name, value, options = {})
check_box_tag(name, value, checked, options = {})
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 455
def check_box_tag(name, *args)
  if args.length >= 4
    raise ArgumentError, "wrong number of arguments (given #{args.length + 1}, expected 1..4)"
  end
  options = args.extract_options!
  value, checked = args.empty? ? ["1", false] : [*args, false]
  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

Создаёт тег элемента формы типа «чекбокс».

Параметры

  • :value - Значение элемента ввода. По умолчанию "1".

  • :checked - Если true, чекбокс будет выбран по умолчанию.

  • :disabled - Если true, пользователь не сможет использовать этот элемент ввода.

  • Любой другой ключ создаёт стандартные HTML-параметры для тега.

Примеры

check_box_tag 'accept'
# => <input id="accept" name="accept" type="checkbox" value="1" />

check_box_tag 'rock', 'rock music'
# => <input id="rock" name="rock" type="checkbox" value="rock music" />

check_box_tag 'receive_email', 'yes', true
# => <input checked="checked" id="receive_email" name="receive_email" type="checkbox" value="yes" />

check_box_tag 'tos', 'yes', false, class: 'accept_tos'
# => <input class="accept_tos" id="tos" name="tos" type="checkbox" value="yes" />

check_box_tag 'eula', 'accepted', false, disabled: true
# => <input disabled="disabled" id="eula" name="eula" type="checkbox" value="accepted" />
color_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 666
def color_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :color))
end

Создаёт текстовое поле типа «цвет».

Параметры

Поддерживает те же параметры, что и text_field_tag.

Примеры

color_field_tag 'name'
# => <input id="name" name="name" type="color" />

color_field_tag 'color', '#DEF726'
# => <input id="color" name="color" type="color" value="#DEF726" />

color_field_tag 'color', nil, class: 'special_input'
# => <input class="special_input" id="color" name="color" type="color" />

color_field_tag 'color', '#DEF726', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="color" name="color" type="color" value="#DEF726" />
date_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 736
def date_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :date))
end

Создаёт текстовое поле типа «дата».

Параметры

Поддерживает те же параметры, что и text_field_tag.

Примеры

date_field_tag 'name'
# => <input id="name" name="name" type="date" />

date_field_tag 'date', '2014-12-31'
# => <input id="date" name="date" type="date" value="2014-12-31" />

date_field_tag 'date', nil, class: 'special_input'
# => <input class="special_input" id="date" name="date" type="date" />

date_field_tag 'date', '2014-12-31', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="date" name="date" type="date" value="2014-12-31" />
datetime_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 795
def datetime_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: "datetime-local"))
end

Создаёт текстовое поле типа «datetime-local».

Параметры

Поддерживает те же параметры, что и text_field_tag. Дополнительно поддерживает:

  • :min - Минимальное допустимое значение.

  • :max - Максимальное допустимое значение.

  • :step - Допустимая точность значения.

  • :include_seconds - Включать секунды в формате отметки времени вывода (по умолчанию true).

Примеры

datetime_field_tag 'name'
# => <input id="name" name="name" type="datetime-local" />

datetime_field_tag 'datetime', '2014-01-01T01:01'
# => <input id="datetime" name="datetime" type="datetime-local" value="2014-01-01T01:01" />

datetime_field_tag 'datetime', nil, class: 'special_input'
# => <input class="special_input" id="datetime" name="datetime" type="datetime-local" />

datetime_field_tag 'datetime', '2014-01-01T01:01', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="datetime" name="datetime" type="datetime-local" value="2014-01-01T01:01" />
Также алиас для: datetime_local_field_tag
datetime_local_field_tag(name, value = nil, options = {})
Псевдоним для: datetime_field_tag
email_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 897
def email_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :email))
end

Создаёт текстовое поле типа «email».

Параметры

Поддерживает те же параметры, что и text_field_tag.

Примеры

email_field_tag 'name'
# => <input id="name" name="name" type="email" />

email_field_tag 'email', 'email@example.com'
# => <input id="email" name="email" type="email" value="email@example.com" />

email_field_tag 'email', nil, class: 'special_input'
# => <input class="special_input" id="email" name="email" type="email" />

email_field_tag 'email', 'email@example.com', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="email" name="email" type="email" value="email@example.com" />
field_id(object_name, method_name, *suffixes, index: nil, namespace: nil) Показать исходный код
# 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

Генерирует значение атрибута HTML id для заданной комбинации имени и поля.

Возвращает значение, сгенерированное FormBuilder для заданного имени атрибута.

<%= 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) %>

В приведённом выше примере элемент <input type="text">, созданный вызовом text_field, объявляет атрибут aria-describedby, ссылающийся на элемент <span>, разделяющий общий id корень (post_title, в данном случае).

field_name(object_name, method_name, *method_names, multiple: false, index: nil) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 132
def field_name(object_name, method_name, *method_names, multiple: false, index: nil)
  names = method_names.map! { |name| "[#{name}]" }.join

  # a little duplication to construct fewer strings
  case
  when object_name.blank?
    "#{method_name}#{names}#{multiple ? "[]" : ""}"
  when index
    "#{object_name}[#{index}][#{method_name}]#{names}#{multiple ? "[]" : ""}"
  else
    "#{object_name}[#{method_name}]#{names}#{multiple ? "[]" : ""}"
  end
end

Генерирует значение атрибута HTML name для заданной комбинации имени и поля.

Возвращает значение, сгенерированное FormBuilder для заданного имени атрибута.

<%= text_field :post, :title, name: field_name(:post, :title, :subtitle) %>
<%# => <input type="text" name="post[title][subtitle]"> %>

<%= text_field :post, :tag, name: field_name(:post, :tag, multiple: true) %>
<%# => <input type="text" name="post[tag][]"> %>
field_set_tag(legend = nil, options = nil, &block) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 638
def field_set_tag(legend = nil, options = nil, &block)
  content = []
  content << content_tag("legend", legend) unless legend.blank?
  content << capture(&block) if block_given?

  content_tag(:fieldset, safe_join(content), options)
end

Создаёт набор полей для группировки элементов HTML-формы.

legend станет заголовком области (необязательно по W3C). options принимают те же значения, что и тег.

Примеры

<%= field_set_tag do %>
  <p><%= text_field_tag 'name' %></p>
<% end %>
# => <fieldset><p><input id="name" name="name" type="text" /></p></fieldset>

<%= field_set_tag 'Your details' do %>
  <p><%= text_field_tag 'name' %></p>
<% end %>
# => <fieldset><legend>Your details</legend><p><input id="name" name="name" type="text" /></p></fieldset>

<%= field_set_tag nil, class: 'format' do %>
  <p><%= text_field_tag 'name' %></p>
<% end %>
# => <fieldset class="format"><p><input id="name" name="name" type="text" /></p></fieldset>
Также алиас для: fieldset_tag
fieldset_tag(legend = nil, options = nil, &block)
Псевдоним для: field_set_tag
file_field_tag(name, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 347
def file_field_tag(name, options = {})
  text_field_tag(name, nil, convert_direct_upload_option_to_url(options.merge(type: :file)))
end

Создаёт поле загрузки файла. Если вы используете загрузку файлов, вам также необходимо установить параметр multipart для тега формы:

<%= form_tag '/upload', multipart: true do %>
  <label for="file">File to Upload</label> <%= file_field_tag "file" %>
  <%= submit_tag %>
<% end %>

Затем указанный URL получит объект File, содержащий выбранный файл, или, если поле было оставлено пустым, объект StringIO.

Параметры

  • Создаёт стандартные HTML-атрибуты для тега.

  • :disabled - Если true, пользователь не сможет использовать этот элемент ввода.

  • :multiple - Если true, *в большинстве обновлённых браузеров* пользователю будет разрешено выбирать несколько файлов.

  • :accept - Если установлено одно или несколько MIME-типов, пользователю будет предложен фильтр при выборе файла. Вам всё равно необходимо настроить валидацию модели.

Примеры

file_field_tag 'attachment'
# => <input id="attachment" name="attachment" type="file" />

file_field_tag 'avatar', class: 'profile_input'
# => <input class="profile_input" id="avatar" name="avatar" type="file" />

file_field_tag 'picture', disabled: true
# => <input disabled="disabled" id="picture" name="picture" type="file" />

file_field_tag 'resume', value: '~/resume.doc'
# => <input id="resume" name="resume" type="file" value="~/resume.doc" />

file_field_tag 'user_pic', accept: 'image/png,image/gif,image/jpeg'
# => <input accept="image/png,image/gif,image/jpeg" id="user_pic" name="user_pic" type="file" />

file_field_tag 'file', accept: 'text/html', class: 'upload', value: 'index.html'
# => <input accept="text/html" class="upload" id="file" name="file" type="file" value="index.html" />
form_tag(url_for_options = {}, options = {}, &block) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 78
def form_tag(url_for_options = {}, options = {}, &block)
  html_options = html_options_for_form(url_for_options, options)
  if block_given?
    form_tag_with_body(html_options, capture(&block))
  else
    form_tag_html(html_options)
  end
end

Начинает тег формы, действие которой направлено на URL, сконфигурированный с помощью url_for_options, точно так же, как ActionController::Base#url_for. По умолчанию метод для формы — POST.

Параметры

  • :multipart — Если установлено в true, атрибут enctype устанавливается в “multipart/form-data”.

  • :method — Метод, используемый при отправке формы, обычно “get” или “post”. Если используется “patch”, “put”, “delete” или другой глагол, добавляется скрытый элемент с именем _method, чтобы смоделировать глагол через post.

  • :authenticity_token — Маркер аутентификации для использования в форме. Используйте только в случае необходимости передачи пользовательского маркера аутентификации или для того, чтобы вообще не добавлять поле authenticity_token (передав false). Дистанционные формы могут опустить встроенный маркер аутентификации, установив config.action_view.embed_authenticity_token_in_remote_forms = false. Это полезно при кэшировании фрагмента формы. Дистанционные формы получают маркер аутентификации из тега meta, поэтому вставка не нужна, если вы поддерживаете браузеры без JavaScript.

  • :remote — Если установлено в true, Unobtrusive JavaScript-драйверы смогут контролировать поведение отправки. По умолчанию это поведение — отправка по ajax.

  • :enforce_utf8 — Если установлено в false, скрытый элемент с именем utf8 не выводится.

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

form_tag('/posts')
# => <form action="/posts" method="post">

form_tag('/posts/1', method: :put)
# => <form action="/posts/1" method="post"> ... <input name="_method" type="hidden" value="put" /> ...

form_tag('/upload', multipart: true)
# => <form action="/upload" method="post" enctype="multipart/form-data">

<%= form_tag('/posts') do -%>
  <div><%= submit_tag 'Save' %></div>
<% end -%>
# => <form action="/posts" method="post"><div><input type="submit" name="commit" value="Save" /></div></form>

<%= form_tag('/posts', remote: true) %>
# => <form action="/posts" method="post" data-remote="true">

form_tag(false, method: :get)
# => <form method="get">

form_tag('http://far.away.com/form', authenticity_token: false)
# form without authenticity token

form_tag('http://far.away.com/form', authenticity_token: "cf50faa3fe97702ca1ae")
# form with custom authenticity token
hidden_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 308
def hidden_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :hidden, autocomplete: "off"))
end

Создаёт скрытое поле ввода формы, используемое для передачи данных, которые потеряются из-за бессостоятельности HTTP или данных, которые должны быть скрыты от пользователя.

Параметры

  • Создаёт стандартные атрибуты HTML для тега.

Примеры

hidden_field_tag 'tags_list'
# => <input type="hidden" name="tags_list" id="tags_list" autocomplete="off" />

hidden_field_tag 'token', 'VUBJKB23UIVI1UU1VOBVI@'
# => <input type="hidden" name="token" id="token" value="VUBJKB23UIVI1UU1VOBVI@" autocomplete="off" />

hidden_field_tag 'collected_input', '', onchange: "alert('Input collected!')"
# => <input type="hidden" name="collected_input" id="collected_input"
     value="" onchange="alert(&#39;Input collected!&#39;)" autocomplete="off" />
image_submit_tag(source, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 612
def image_submit_tag(source, options = {})
  options = options.stringify_keys
  src = path_to_image(source, skip_pipeline: options.delete("skip_pipeline"))
  tag :input, { "type" => "image", "src" => src }.update(options)
end

Отображает изображение, которое при нажатии отправляет форму.

source передаётся в AssetTagHelper#path_to_image

Параметры

  • :data — Этот параметр может быть использован для добавления пользовательских атрибутов данных.

  • :disabled — Если установлено в true, пользователь не сможет использовать этот элемент.

  • Любой другой ключ создаёт стандартные параметры HTML для тега.

Атрибуты данных

  • confirm: 'question?' — Это добавит всплывающее окно подтверждения JavaScript с заданным вопросом. Если пользователь подтвердит, форма обрабатывается обычно, в противном случае никаких действий не выполняется.

Примеры

image_submit_tag("login.png")
# => <input src="/assets/login.png" type="image" />

image_submit_tag("purchase.png", disabled: true)
# => <input disabled="disabled" src="/assets/purchase.png" type="image" />

image_submit_tag("search.png", class: 'search_button', alt: 'Find')
# => <input class="search_button" src="/assets/search.png" type="image" />

image_submit_tag("agree.png", disabled: true, class: "agree_disagree_button")
# => <input class="agree_disagree_button" disabled="disabled" src="/assets/agree.png" type="image" />

image_submit_tag("save.png", data: { confirm: "Are you sure?" })
# => <input src="/assets/save.png" data-confirm="Are you sure?" type="image" />
label_tag(name = nil, content_or_options = nil, options = nil, &block) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 281
def label_tag(name = nil, content_or_options = nil, options = nil, &block)
  if block_given? && content_or_options.is_a?(Hash)
    options = content_or_options = content_or_options.stringify_keys
  else
    options ||= {}
    options = options.stringify_keys
  end
  options["for"] = sanitize_to_id(name) unless name.blank? || options.has_key?("for")
  content_tag :label, content_or_options || name.to_s.humanize, options, &block
end

Создаёт элемент метки. Принимает блок.

Параметры

  • Создаёт стандартные атрибуты HTML для тега.

Примеры

label_tag 'name'
# => <label for="name">Name</label>

label_tag 'name', 'Your name'
# => <label for="name">Your name</label>

label_tag 'name', nil, class: 'small_label'
# => <label for="name" class="small_label">Name</label>
month_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 824
def month_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :month))
end

Создаёт текстовое поле типа “month”.

Параметры

Поддерживает те же параметры, что и text_field_tag. Кроме того, поддерживает:

  • :min — Минимальное допустимое значение.

  • :max — Максимальное допустимое значение.

  • :step — Допустимая гранулярность значений.

Примеры

month_field_tag 'name'
# => <input id="name" name="name" type="month" />

month_field_tag 'month', '2014-01'
# => <input id="month" name="month" type="month" value="2014-01" />

month_field_tag 'month', nil, class: 'special_input'
# => <input class="special_input" id="month" name="month" type="month" />

month_field_tag 'month', '2014-01', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="month" name="month" type="month" value="2014-01" />
number_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 945
def number_field_tag(name, value = nil, options = {})
  options = options.stringify_keys
  options["type"] ||= "number"
  if range = options.delete("in") || options.delete("within")
    options.update("min" => range.min, "max" => range.max)
  end
  text_field_tag(name, value, options)
end

Создаёт поле для ввода чисел.

Параметры

Поддерживает те же параметры, что и text_field_tag. Кроме того, поддерживает:

  • :min — Минимальное допустимое значение.

  • :max — Максимальное допустимое значение.

  • :in — Диапазон, определяющий :min и :max значения.

  • :within — То же, что и :in.

  • :step — Допустимая гранулярность значений.

Примеры

number_field_tag 'quantity'
# => <input id="quantity" name="quantity" type="number" />

number_field_tag 'quantity', '1'
# => <input id="quantity" name="quantity" type="number" value="1" />

number_field_tag 'quantity', nil, class: 'special_input'
# => <input class="special_input" id="quantity" name="quantity" type="number" />

number_field_tag 'quantity', nil, min: 1
# => <input id="quantity" name="quantity" min="1" type="number" />

number_field_tag 'quantity', nil, max: 9
# => <input id="quantity" name="quantity" max="9" type="number" />

number_field_tag 'quantity', nil, in: 1...10
# => <input id="quantity" name="quantity" min="1" max="9" type="number" />

number_field_tag 'quantity', nil, within: 1...10
# => <input id="quantity" name="quantity" min="1" max="9" type="number" />

number_field_tag 'quantity', nil, min: 1, max: 10
# => <input id="quantity" name="quantity" min="1" max="10" type="number" />

number_field_tag 'quantity', nil, min: 1, max: 10, step: 2
# => <input id="quantity" name="quantity" min="1" max="10" step="2" type="number" />

number_field_tag 'quantity', '1', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="quantity" name="quantity" type="number" value="1" />
password_field_tag(name = "password", value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 380
def password_field_tag(name = "password", value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :password))
end

Создаёт поле для ввода пароля, текстовое поле с маскировкой, которое скроет ввод пользователя за символом маски.

Параметры

  • :disabled — Если установлено в true, пользователь не сможет использовать этот элемент.

  • :size — Количество видимых символов, которые будут помещаться в поле ввода.

  • :maxlength — Максимальное количество символов, которое браузер позволит ввести пользователю.

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

password_field_tag 'pass'
# => <input id="pass" name="pass" type="password" />

password_field_tag 'secret', 'Your secret here'
# => <input id="secret" name="secret" type="password" value="Your secret here" />

password_field_tag 'masked', nil, class: 'masked_input_field'
# => <input class="masked_input_field" id="masked" name="masked" type="password" />

password_field_tag 'token', '', size: 15
# => <input id="token" name="token" size="15" type="password" value="" />

password_field_tag 'key', nil, maxlength: 16
# => <input id="key" maxlength="16" name="key" type="password" />

password_field_tag 'confirm_pass', nil, disabled: true
# => <input disabled="disabled" id="confirm_pass" name="confirm_pass" type="password" />

password_field_tag 'pin', '1234', maxlength: 4, size: 6, class: "pin_input"
# => <input class="pin_input" id="pin" maxlength="4" name="pin" size="6" type="password" value="1234" />
phone_field_tag(name, value = nil, options = {})
Псевдоним для: telephone_field_tag
radio_button_tag(name, value, options = {}) Показать исходный код
radio_button_tag(name, value, checked, options = {})
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 491
def radio_button_tag(name, value, *args)
  if args.length >= 3
    raise ArgumentError, "wrong number of arguments (given #{args.length + 2}, expected 2..4)"
  end
  options = args.extract_options!
  checked = args.empty? ? false : args.first
  html_options = { "type" => "radio", "name" => name, "id" => "#{sanitize_to_id(name)}_#{sanitize_to_id(value)}", "value" => value }.update(options.stringify_keys)
  html_options["checked"] = "checked" if checked
  tag :input, html_options
end

Создаёт радиокнопку; используйте группы радиокнопок с одинаковым именем, чтобы пользователи могли выбирать из группы вариантов.

Параметры

  • :checked — Если установлено в true, радиокнопка будет выбрана по умолчанию.

  • :disabled — Если установлено в true, пользователь не сможет использовать этот элемент.

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

radio_button_tag 'favorite_color', 'maroon'
# => <input id="favorite_color_maroon" name="favorite_color" type="radio" value="maroon" />

radio_button_tag 'receive_updates', 'no', true
# => <input checked="checked" id="receive_updates_no" name="receive_updates" type="radio" value="no" />

radio_button_tag 'time_slot', "3:00 p.m.", false, disabled: true
# => <input disabled="disabled" id="time_slot_3:00_p.m." name="time_slot" type="radio" value="3:00 p.m." />

radio_button_tag 'color', "green", true, class: "color_input"
# => <input checked="checked" class="color_input" id="color_green" name="color" type="radio" value="green" />
range_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 970
def range_field_tag(name, value = nil, options = {})
  number_field_tag(name, value, options.merge(type: :range))
end

Создаёт элемент диапазона формы.

Параметры

Поддерживает те же параметры, что и number_field_tag.

Примеры

range_field_tag 'quantity', '1'
# => <input id="quantity" name="quantity" type="range" value="1" />

range_field_tag 'quantity', in: 1...10
# => <input id="quantity" name="quantity" min="1" max="9" type="range" />

range_field_tag 'quantity', min: 1, max: 10, step: 2
# => <input id="quantity" name="quantity" min="1" max="10" step="2" type="range"
search_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 689
def search_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :search))
end

Создаёт текстовое поле типа “search”.

Параметры

Поддерживает те же параметры, что и text_field_tag.

Примеры

search_field_tag 'name'
# => <input id="name" name="name" type="search" />

search_field_tag 'search', 'Enter your search query here'
# => <input id="search" name="search" type="search" value="Enter your search query here" />

search_field_tag 'search', nil, class: 'special_input'
# => <input class="special_input" id="search" name="search" type="search" />

search_field_tag 'search', 'Enter your search query here', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="search" name="search" type="search" value="Enter your search query here" />
select_tag(name, option_tags = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 201
def select_tag(name, option_tags = nil, options = {})
  option_tags ||= ""
  html_name = (options[:multiple] == true && !name.end_with?("[]")) ? "#{name}[]" : name

  if options.include?(:include_blank)
    include_blank = options[:include_blank]
    options = options.except(:include_blank)
    options_for_blank_options_tag = { value: "" }

    if include_blank == true
      include_blank = ""
      options_for_blank_options_tag[:label] = " "
    end

    if include_blank
      option_tags = content_tag("option", include_blank, options_for_blank_options_tag).safe_concat(option_tags)
    end
  end

  if prompt = options.delete(:prompt)
    option_tags = content_tag("option", prompt, value: "").safe_concat(option_tags)
  end

  content_tag "select", option_tags, { "name" => html_name, "id" => sanitize_to_id(name) }.update(options.stringify_keys)
end

Создаёт выпадающий список, или, если опция :multiple установлена в true, многострочный выпадающий список.

Helpers::FormOptions можно использовать для создания стандартных выпадающих списков, таких как страны, часовые пояса или связанные записи. option_tags — это строка, содержащая теги опций для выпадающего списка.

Опции

  • :multiple - Если установлено в true, выбор позволит несколько вариантов.

  • :disabled - Если установлено в true, пользователь не сможет использовать этот элемент ввода.

  • :include_blank - Если установлено в true, будет создана пустая опция. Если задано как строка, строка будет использоваться в качестве содержимого опции, а значение будет пустым.

  • :prompt - Создаёт опцию с подсказкой для выбора.

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

select_tag "people", options_from_collection_for_select(@people, "id", "name")
# <select id="people" name="people"><option value="1">David</option></select>

select_tag "people", options_from_collection_for_select(@people, "id", "name", "1")
# <select id="people" name="people"><option value="1" selected="selected">David</option></select>

select_tag "people", raw("<option>David</option>")
# => <select id="people" name="people"><option>David</option></select>

select_tag "count", raw("<option>1</option><option>2</option><option>3</option><option>4</option>")
# => <select id="count" name="count"><option>1</option><option>2</option>
#    <option>3</option><option>4</option></select>

select_tag "colors", raw("<option>Red</option><option>Green</option><option>Blue</option>"), multiple: true
# => <select id="colors" multiple="multiple" name="colors[]"><option>Red</option>
#    <option>Green</option><option>Blue</option></select>

select_tag "locations", raw("<option>Home</option><option selected='selected'>Work</option><option>Out</option>")
# => <select id="locations" name="locations"><option>Home</option><option selected='selected'>Work</option>
#    <option>Out</option></select>

select_tag "access", raw("<option>Read</option><option>Write</option>"), multiple: true, class: 'form_input', id: 'unique_id'
# => <select class="form_input" id="unique_id" multiple="multiple" name="access[]"><option>Read</option>
#    <option>Write</option></select>

select_tag "people", options_from_collection_for_select(@people, "id", "name"), include_blank: true
# => <select id="people" name="people"><option value="" label=" "></option><option value="1">David</option></select>

select_tag "people", options_from_collection_for_select(@people, "id", "name"), include_blank: "All"
# => <select id="people" name="people"><option value="">All</option><option value="1">David</option></select>

select_tag "people", options_from_collection_for_select(@people, "id", "name"), prompt: "Select something"
# => <select id="people" name="people"><option value="">Select something</option><option value="1">David</option></select>

select_tag "destination", raw("<option>NYC</option><option>Paris</option><option>Rome</option>"), disabled: true
# => <select disabled="disabled" id="destination" name="destination"><option>NYC</option>
#    <option>Paris</option><option>Rome</option></select>

select_tag "credit_card", options_for_select([ "VISA", "MasterCard" ], "MasterCard")
# => <select id="credit_card" name="credit_card"><option>VISA</option>
#    <option selected="selected">MasterCard</option></select>
submit_tag(value = "Сохранить изменения", options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 525
def submit_tag(value = "Save changes", options = {})
  options = options.deep_stringify_keys
  tag_options = { "type" => "submit", "name" => "commit", "value" => value }.update(options)
  set_default_disable_with value, tag_options
  tag :input, tag_options
end

Создаёт кнопку отправки с текстом value в качестве подписи.

Опции

  • :data - Эта опция может использоваться для добавления пользовательских атрибутов данных.

  • :disabled - Если true, пользователь не сможет использовать этот элемент ввода.

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

submit_tag
# => <input name="commit" data-disable-with="Save changes" type="submit" value="Save changes" />

submit_tag "Edit this article"
# => <input name="commit" data-disable-with="Edit this article" type="submit" value="Edit this article" />

submit_tag "Save edits", disabled: true
# => <input disabled="disabled" name="commit" data-disable-with="Save edits" type="submit" value="Save edits" />

submit_tag nil, class: "form_submit"
# => <input class="form_submit" name="commit" type="submit" />

submit_tag "Edit", class: "edit_button"
# => <input class="edit_button" data-disable-with="Edit" name="commit" type="submit" value="Edit" />
telephone_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 712
def telephone_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :tel))
end

Создаёт текстовое поле типа “tel”.

Опции

Поддерживает те же опции, что и text_field_tag.

Примеры

telephone_field_tag 'name'
# => <input id="name" name="name" type="tel" />

telephone_field_tag 'tel', '0123456789'
# => <input id="tel" name="tel" type="tel" value="0123456789" />

telephone_field_tag 'tel', nil, class: 'special_input'
# => <input class="special_input" id="tel" name="tel" type="tel" />

telephone_field_tag 'tel', '0123456789', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="tel" name="tel" type="tel" value="0123456789" />
Также алиасировано как: phone_field_tag
text_area_tag(name, content = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 413
def text_area_tag(name, content = nil, options = {})
  options = options.stringify_keys

  if size = options.delete("size")
    options["cols"], options["rows"] = size.split("x") if size.respond_to?(:split)
  end

  escape = options.delete("escape") { true }
  content = ERB::Util.html_escape(content) if escape

  content_tag :textarea, content.to_s.html_safe, { "name" => name, "id" => sanitize_to_id(name) }.update(options)
end

Создаёт текстовую область ввода; используйте textarea для ввода более длинного текста, такого как посты в блоге или описания.

Опции

  • :size - Строка, определяющая размеры (столбцы на строки) textarea (например, “25x10”).

  • :rows - Укажите количество строк в textarea.

  • :cols - Укажите количество столбцов в textarea.

  • :disabled - Если установлено в true, пользователь не сможет использовать этот элемент ввода.

  • :escape - По умолчанию содержимое текстового поля экранируется как HTML. Если вам нужны неэкранированные данные, установите это значение в false.

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

text_area_tag 'post'
# => <textarea id="post" name="post"></textarea>

text_area_tag 'bio', @user.bio
# => <textarea id="bio" name="bio">This is my biography.</textarea>

text_area_tag 'body', nil, rows: 10, cols: 25
# => <textarea cols="25" id="body" name="body" rows="10"></textarea>

text_area_tag 'body', nil, size: "25x10"
# => <textarea name="body" id="body" cols="25" rows="10"></textarea>

text_area_tag 'description', "Description goes here.", disabled: true
# => <textarea disabled="disabled" id="description" name="description">Description goes here.</textarea>

text_area_tag 'comment', nil, class: 'comment_input'
# => <textarea class="comment_input" id="comment" name="comment"></textarea>
text_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 263
def text_field_tag(name, value = nil, options = {})
  tag :input, { "type" => "text", "name" => name, "id" => sanitize_to_id(name), "value" => value }.update(options.stringify_keys)
end

Создаёт стандартное текстовое поле; используйте эти поля для ввода коротких текстов, таких как имя пользователя или поисковый запрос.

Опции

  • :disabled - Если установлено в true, пользователь не сможет использовать этот элемент ввода.

  • :size - Количество видимых символов, которые поместятся в поле ввода.

  • :maxlength - Максимальное количество символов, которое браузер позволит ввести пользователю.

  • :placeholder - Текст, содержащийся в поле по умолчанию, который удаляется при получении фокуса. Если установлено в true, используется перевод из текущего локаля I18n (через helpers.placeholder.<modelname>.<attribute>).

  • Любой другой ключ создаёт стандартные атрибуты HTML для тега.

Примеры

text_field_tag 'name'
# => <input id="name" name="name" type="text" />

text_field_tag 'query', 'Enter your search query here'
# => <input id="query" name="query" type="text" value="Enter your search query here" />

text_field_tag 'search', nil, placeholder: 'Enter search term...'
# => <input id="search" name="search" placeholder="Enter search term..." type="text" />

text_field_tag 'request', nil, class: 'special_input'
# => <input class="special_input" id="request" name="request" type="text" />

text_field_tag 'address', '', size: 75
# => <input id="address" name="address" size="75" type="text" value="" />

text_field_tag 'zip', nil, maxlength: 5
# => <input id="zip" maxlength="5" name="zip" type="text" />

text_field_tag 'payment_amount', '$0.00', disabled: true
# => <input disabled="disabled" id="payment_amount" name="payment_amount" type="text" value="$0.00" />

text_field_tag 'ip', '0.0.0.0', maxlength: 15, size: 20, class: "ip-input"
# => <input class="ip-input" id="ip" maxlength="15" name="ip" size="20" type="text" value="0.0.0.0" />
time_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 767
def time_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :time))
end

Создаёт текстовое поле типа “time”.

Опции

Поддерживает те же опции, что и text_field_tag. Дополнительно поддерживает:

  • :min - Минимальное допустимое значение.

  • :max - Максимальное допустимое значение.

  • :step - Допустимая гранулярность значения.

  • :include_seconds - Включить секунды и миллисекунды в формате отметки времени вывода (по умолчанию true).

Примеры

time_field_tag 'name'
# => <input id="name" name="name" type="time" />

time_field_tag 'time', '01:01'
# => <input id="time" name="time" type="time" value="01:01" />

time_field_tag 'time', nil, class: 'special_input'
# => <input class="special_input" id="time" name="time" type="time" />

time_field_tag 'time', '01:01', include_seconds: true
# => <input id="time" name="time" type="time" value="01:01:00.000" />

time_field_tag 'time', '01:01', min: '00:00', max: '23:59', step: 1
# => <input id="time" max="23:59" min="00:00" name="time" step="1" type="time" value="01:01" />
url_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 874
def url_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :url))
end

Создаёт текстовое поле типа “url”.

Опции

Поддерживает те же опции, что и text_field_tag.

Примеры

url_field_tag 'name'
# => <input id="name" name="name" type="url" />

url_field_tag 'url', 'http://rubyonrails.org'
# => <input id="url" name="url" type="url" value="http://rubyonrails.org" />

url_field_tag 'url', nil, class: 'special_input'
# => <input class="special_input" id="url" name="url" type="url" />

url_field_tag 'url', 'http://rubyonrails.org', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="url" name="url" type="url" value="http://rubyonrails.org" />
utf8_enforcer_tag() Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 976
def utf8_enforcer_tag
  # Use raw HTML to ensure the value is written as an HTML entity; it
  # needs to be the right character regardless of which encoding the
  # browser infers.
  '<input name="utf8" type="hidden" value="&#x2713;" autocomplete="off" />'.html_safe
end

Создаёт скрытый тег UTF-8 enforcer. Переопределите этот метод в хелпере для настройки тега.

week_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 851
def week_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :week))
end

Создаёт текстовое поле типа “week”.

Опции

Поддерживает те же опции, что и text_field_tag. Дополнительно поддерживает:

  • :min - Минимальное допустимое значение.

  • :max - Максимальное допустимое значение.

  • :step - Допустимая гранулярность значения.

Примеры

week_field_tag 'name'
# => <input id="name" name="name" type="week" />

week_field_tag 'week', '2014-W01'
# => <input id="week" name="week" type="week" value="2014-W01" />

week_field_tag 'week', nil, class: 'special_input'
# => <input class="special_input" id="week" name="week" type="week" />

week_field_tag 'week', '2014-W01', class: 'special_input', disabled: true
# => <input disabled="disabled" class="special_input" id="week" name="week" type="week" value="2014-W01" />

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API