Передайте поведение кнопки частичному в качестве параметра

#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 в данном случае) функции в виде хэша аргументов и чтобы функция могла «деструктировать» ее, что выглядит как «нет».