модуль 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 605
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, если тип не указан.
Параметры
-
: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>
Устарело: атрибуты Rails UJS
До Rails 7, Rails по умолчанию поставлялся с библиотекой JavaScript под названием @rails/ujs. Начиная с Rails 7, эта библиотека больше не включена по умолчанию. Эта библиотека интегрировалась со следующими параметрами:
-
confirm: 'question?'- При наличии драйверы неочевидного JavaScript предоставят запрос с указанным вопросом. Если пользователь соглашается, форма обрабатывается нормально, в противном случае никаких действий не предпринимается. -
:disable_with- Значение этого параметра будет использоваться в качестве значения для отключенной версии кнопки отправки при отправке формы. Эта функция предоставляется драйвером неочевидного JavaScript.button_tag“Save”, data: { confirm: “Are you sure?” } # => <button name=“button” type=“submit” data-confirm=“Are you sure?”>Save</button>button_tag“Checkout”, data: { disable_with: “Please wait…” } # => <button data-disable-with=“Please wait…” name=“button” type=“submit”>Checkout</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 703
def color_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.merge(type: :color))
end Создает текстовое поле типа «color».
Параметры
Поддерживает те же параметры, что и 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 773
def date_field_tag(name, value = nil, options = {})
text_field_tag(name, value, options.merge(type: :date))
end Создает текстовое поле типа «date».
Параметры
Поддерживает те же параметры, что и text_field_tag.
Примеры
date_field_tag 'name' # => <input id="name" name="name" type="date" /> date_field_tag 'date', '01/01/2014' # => <input id="date" name="date" type="date" value="01/01/2014" /> date_field_tag 'date', nil, class: 'special_input' # => <input class="special_input" id="date" name="date" type="date" /> date_field_tag 'date', '01/01/2014', class: 'special_input', disabled: true # => <input disabled="disabled" class="special_input" id="date" name="date" type="date" value="01/01/2014" />
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 801
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).
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 875
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_tag :post, :title, aria: { describedby: field_id(:post, :title, :error) } %>
<%= tag.span("is blank", id: field_id(:post, :title, :error) %> В приведенном выше примере элемент <input type="text">, созданный вызовом text_field_tag, объявляет атрибут 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_tag :post, :title, name: field_name(:post, :title, :subtitle) %> <%# => <input type="text" name="post[title][subtitle]"> <%= text_field_tag :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 677
def field_set_tag(legend = nil, options = nil, &block)
output = tag(:fieldset, options, true)
output.safe_concat(content_tag("legend", legend)) unless legend.blank?
output.concat(capture(&block)) if block_given?
output.safe_concat("</fieldset>")
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, кодировка устанавливается в «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 651
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 816
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- Допустимая гранулярность значений.
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 923
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 937
def range_field_tag(name, value = nil, options = {})
number_field_tag(name, value, options.merge(type: :range))
end Создаёт элемент формы диапазона.
Параметры
Поддерживает те же параметры, что и number_field_tag.
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 726
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 544
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" />
Устаревшие атрибуты Rails UJS
До Rails 7, в Rails по умолчанию поставлялась библиотека JavaScript @rails/ujs. После Rails 7 эта библиотека больше не включается по умолчанию. Эта библиотека интегрировалась со следующими опциями:
-
confirm: 'question?'- Если присутствует, драйверы неочевидного JavaScript предоставят подсказку с заданным вопросом. Если пользователь примет, форма обрабатывается нормально, в противном случае никаких действий не предпринимается. -
:disable_with- Значение этого параметра будет использоваться в качестве значения для отключённой версии кнопки отправки при отправке формы. Эта функция предоставляется драйвером неочевидного JavaScript. Чтобы отключить эту функцию для отдельной кнопки отправки, передайте:data => { disable_with: false }Значение по умолчанию — атрибут value.submit_tag“Завершить продажу”, data: { disable_with: “Отправляется…” } # => <input name=“commit” data-disable-with=“Отправляется…” type=“submit” value=“Завершить продажу” />submit_tag“Сохранить”, data: { confirm: “Вы уверены?” } # => <input name=‘commit’ type=‘submit’ value=‘Сохранить’ data-disable-with=“Сохранить” data-confirm=“Вы уверены?” />
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 749
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 787
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).
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 852
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 943 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 829
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- Допустимая гранулярность значений.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.