#ruby-on-rails
Вопрос:
my_view/индекс.html.erb
<%= render partial: "shared/button", locals: {title: "Foo", url:resend_verification_url, method: :put } %>
/общий доступ/_button.html.erb
<%= button_to title, url, method: method || nil, class: "btn btn-primary btn-sm " %>
Вышесказанное работает, но я пытаюсь понять, можно ли еще больше упростить местные
жители, переданные частичной кнопке, что-то вроде:
locals: {title: "Foo", behaviour: {resend_verification_url, method: :put}}
и <%= button_to title, **behaviour , class: "btn btn-primary btn-sm " %>
но это дает целую кучу синтаксических ошибок.
Есть ли способ передать поведение как одну единую сущность частичному?
Комментарии:
1. Ваша синтаксическая ошибка, вероятно, вызвана тем, что
behaviour: {resend_verification_url,...}
не является допустимым хэшем.
Ответ №1:
Подпись button_to
принимает три параметра (документы):
button_to(name = nil, options = nil, html_options = nil, amp;block)
- Название / метка кнопки
options
Параметр обычно представляет собой строку (например, вывод_url
_path
помощника или), но также может быть хэшем, который имеет те же ключи, которые обычно используются для настройки маршрутаconfig/routes.rb
(например,:controller
,:action
, и т.д.).html_options
Параметр в основном представляет собой хэш всего остального. Есть несколько специальных опций, таких как:method
,:disabled
, и:data
, но вы также можете передавать чистые атрибуты HTML, такие как:class
.
Таким образом, вы не можете передать один хэш/локальный, который включает в себя как URL-адрес, так и другие параметры, как в вашем вопросе, поскольку их необходимо передавать button_to
отдельно. Если вы разделите компонент URL, вы все равно сможете сделать что-то вроде того, что вы просите о параметрах HTML:
<%= render(partial: "shared/button",
locals: { title: "Foo", url: resend_verification_url,
html_opts: { method: :put })
%>
И затем:
<%= button_to(title, url, **html_opts, class: ...) %>
Комментарии:
1. Да, я предполагаю, что мой вопрос на самом деле сводится к тому, можно ли передать несколько параметров (т. Е.
options
иhtml_options
в данном случае) функции в виде хэша аргументов и чтобы функция могла «деструктировать» ее, что выглядит как «нет».