модуль ActionView::Helpers::FormTagHelper
Справочник по тегам форм Action View
Предоставляет ряд методов для создания тегов форм, которые не зависят от объекта Active Record, присвоенного шаблону, как это делает FormHelper. Вместо этого вы вручную указываете имена и значения.
ПРИМЕЧАНИЕ: HTML-опции disabled, readonly, и multiple могут быть интерпретированы как булевы значения. Поэтому указание disabled: true даст disabled="disabled".
Публичные методы экземпляра
# 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>
# 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" />
# 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" />
# 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" />
# 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" />
# 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" />
# 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, в данном случае).
# 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][]"> %>
# 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>
# 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" />
# 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 Создаёт скрытое поле ввода формы, используемое для передачи данных, которые потеряются из-за бессостоятельности 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('Input collected!')" autocomplete="off" /> # 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" />
# 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>
# 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" />
# 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" />
# 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" />
# 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" />
# 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"
# 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" />
# 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>
# 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" />
# 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" />
# 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>
# 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" />
# 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" />
# 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" />
# 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="✓" autocomplete="off" />'.html_safe end
Создаёт скрытый тег UTF-8 enforcer. Переопределите этот метод в хелпере для настройки тега.
# 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.