Spec-Zone.ru › Ruby on Rails 7.1

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

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

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

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

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

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

button_tag(content_or_options = nil, options = nil, &block) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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>

check_box_tag(name, options = {}) Показать исходный код
check_box_tag(name, value, options = {})
check_box_tag(name, value, checked, options = {})
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 455
def check_box_tag(name, *args)
  if args.length >= 4
    raise ArgumentError, "wrong number of arguments (given #{args.length + 1}, expected 1..4)"
  end
  options = args.extract_options!
  value, checked = args.empty? ? ["1", false] : [*args, false]
  html_options = { "type" => "checkbox", "name" => name, "id" => sanitize_to_id(name), "value" => value }.update(options.stringify_keys)
  html_options["checked"] = "checked" if checked
  tag :input, html_options
end

Создает тег флажка формы.

Параметры

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

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

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

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

Примеры

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

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

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

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

check_box_tag 'eula', 'accepted', false, disabled: true
# => <input disabled="disabled" id="eula" name="eula" type="checkbox" value="accepted" />
color_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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" />
date_field_tag(name, value = nil, options = {}) Показать исходный код
# 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" />
datetime_field_tag(name, value = nil, options = {}) Показать исходный код
# 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).

Также имеет псевдоним: datetime_local_field_tag
datetime_local_field_tag(name, value = nil, options = {})
Псевдоним для: datetime_field_tag
email_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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" />
field_id(object_name, method_name, *suffixes, index: nil, namespace: nil) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 102
def field_id(object_name, method_name, *suffixes, index: nil, namespace: nil)
  if object_name.respond_to?(:model_name)
    object_name = object_name.model_name.singular
  end

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

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

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

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

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

<%= label_tag :post, :title %>
<%= text_field_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, в данном случае).

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

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

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

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

<%= text_field_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][]">
field_set_tag(legend = nil, options = nil, &block) Показать исходный код
# 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_field_tag(name, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 347
def file_field_tag(name, options = {})
  text_field_tag(name, nil, convert_direct_upload_option_to_url(options.merge(type: :file)))
end

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

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

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

Параметры

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

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

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

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

Примеры

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

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

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

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

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

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

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

Параметры

  • :multipart - Если установлено в true, кодировка устанавливается в «multipart/form-data».

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

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

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

Параметры

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

Примеры

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

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

hidden_field_tag 'collected_input', '', onchange: "alert('Input collected!')"
# => <input type="hidden" name="collected_input" id="collected_input"
     value="" onchange="alert(&#39;Input collected!&#39;)" autocomplete="off" />
image_submit_tag(source, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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" />
label_tag(name = nil, content_or_options = nil, options = nil, &block) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 281
def label_tag(name = nil, content_or_options = nil, options = nil, &block)
  if block_given? && content_or_options.is_a?(Hash)
    options = content_or_options = content_or_options.stringify_keys
  else
    options ||= {}
    options = options.stringify_keys
  end
  options["for"] = sanitize_to_id(name) unless name.blank? || options.has_key?("for")
  content_tag :label, content_or_options || name.to_s.humanize, options, &block
end

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

Параметры

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

Примеры

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

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

label_tag 'name', nil, class: 'small_label'
# => <label for="name" class="small_label">Name</label>
month_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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 - Допустимая гранулярность значений.

number_field_tag(name, value = nil, options = {}) Показать исходный код
# 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" />
password_field_tag(name = "password", value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 380
def password_field_tag(name = "password", value = nil, options = {})
  text_field_tag(name, value, options.merge(type: :password))
end

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

Параметры

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

Параметры

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

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

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

Примеры

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

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

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

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

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

Параметры

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

search_field_tag(name, value = nil, options = {}) Показать исходный код
# 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" />
select_tag(name, option_tags = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 201
def select_tag(name, option_tags = nil, options = {})
  option_tags ||= ""
  html_name = (options[:multiple] == true && !name.end_with?("[]")) ? "#{name}[]" : name

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

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

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

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

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

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

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

Опции

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

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

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

  • :prompt - Создаёт опцию с пустым значением и текстом, просящим пользователя выбрать что-то.

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

Примеры

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

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

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

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

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

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

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

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

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

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

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

select_tag "credit_card", options_for_select([ "VISA", "MasterCard" ], "MasterCard")
# => <select id="credit_card" name="credit_card"><option>VISA</option>
#    <option selected="selected">MasterCard</option></select>
submit_tag(value = "Сохранить изменения", options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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=“Вы уверены?” />

telephone_field_tag(name, value = nil, options = {}) Показать исходный код
# 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" />
Также алиасирован как: phone_field_tag
text_area_tag(name, content = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 413
def text_area_tag(name, content = nil, options = {})
  options = options.stringify_keys

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

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

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

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

Опции

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

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

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

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

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

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

Примеры

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

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

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

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

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

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

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

Опции

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

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

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

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

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

Примеры

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

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

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

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

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

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

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

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

url_field_tag(name, value = nil, options = {}) Показать исходный код
# 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" />
utf8_enforcer_tag() Показать исходный код
# 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="&#x2713;" autocomplete="off" />'.html_safe
end

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

week_field_tag(name, value = nil, options = {}) Показать исходный код
# File actionview/lib/action_view/helpers/form_tag_helper.rb, line 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.

Spec-Zone.ru

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