модуль 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 568
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, например. Вы можете использовать тег button как обычный тег submit, но он не поддерживается в устаревших браузерах. Однако тег button позволяет использовать более богатые подписи, такие как изображения и выделение, поэтому этот помощник также будет принимать блок. По умолчанию он создаст тег button с типом submit, если тип не указан.
Options
-
:data- Этот параметр можно использовать для добавления пользовательских атрибутов данных. -
:disabled- Если true, пользователь не сможет использовать этот ввод. -
Любой другой ключ создает стандартные параметры HTML для тега.
Examples
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 456
def checkbox_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 Создает тег элемента формы флажка.
Options
-
:value- Значение ввода. По умолчанию"1". -
:checked- Если установлено в true, флажок будет установлен по умолчанию. -
:disabled- Если установлено в true, пользователь не сможет использовать этот ввод. -
Любой другой ключ создает стандартные параметры HTML для тега.
Examples
checkbox_tag 'accept' # => <input id="accept" name="accept" type="checkbox" value="1" /> checkbox_tag 'rock', 'rock music' # => <input id="rock" name="rock" type="checkbox" value="rock music" /> checkbox_tag 'receive_email', 'yes', true # => <input checked="checked" id="receive_email" name="receive_email" type="checkbox" value="yes" /> checkbox_tag 'tos', 'yes', false, class: 'accept_tos' # => <input class="accept_tos" id="tos" name="tos" type="checkbox" value="yes" /> checkbox_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 668
def color_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.merge(type: :color))
end Создает текстовое поле типа «color».
Options
Поддерживает те же параметры, что и text_field_tag.
Examples
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 738
def date_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.merge(type: :date))
end Создает текстовое поле типа «date».
Options
Поддерживает те же параметры, что и text_field_tag.
Examples
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 797
def datetime_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.merge(type: "datetime-local"))
end Создает текстовое поле типа «datetime-local».
Options
Поддерживает те же параметры, что и text_field_tag. Дополнительно поддерживает:
-
:min- Минимально допустимое значение. -
:max- Максимально допустимое значение. -
:step- Допустимая гранулярность значения. -
:include_seconds- Включить секунды в выходной формат метки времени (по умолчанию true).
Examples
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 899
def email_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.merge(type: :email))
end Создает текстовое поле типа «email».
Options
Поддерживает те же параметры, что и text_field_tag.
Examples
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 640
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 принимают те же значения, что и тег.
Examples
<%= 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.
Options
-
Создает стандартные атрибуты HTML для тега.
-
:disabled- Если установлено в true, пользователь не сможет использовать этот ввод. -
:multiple- Если установлено в true, *в большинстве современных браузеров* пользователю будет разрешено выбирать несколько файлов. -
:accept- Если установлен один или несколько типов MIME, пользователю будет предложен фильтр при выборе файла. Вам все равно нужно настроить проверку модели.
Examples
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 614
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 826
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 947
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 493
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 972
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 691
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 527
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 714
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 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 413
def textarea_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 для тега.
Примеры
textarea_tag 'post' # => <textarea id="post" name="post"></textarea> textarea_tag 'bio', @user.bio # => <textarea id="bio" name="bio">This is my biography.</textarea> textarea_tag 'body', nil, rows: 10, cols: 25 # => <textarea cols="25" id="body" name="body" rows="10"></textarea> textarea_tag 'body', nil, size: "25x10" # => <textarea name="body" id="body" cols="25" rows="10"></textarea> textarea_tag 'description', "Description goes here.", disabled: true # => <textarea disabled="disabled" id="description" name="description">Description goes here.</textarea> textarea_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 769
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 876
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 978 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 853
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.