Как передать кнопку выбора в параметры, переданные при отправке формы? - PullRequest
0 голосов
/ 09 июня 2018

Как вы можете позволить, чтобы выбор btn-группы передавался с другими параметрами, когда форма отправляется пользователем?

Чтобы избавить вас от необходимости прочесывать мою довольно многословную вложенную форму,Я разбью его на простом примере.

Здесь @list является частью обратного вызова контроллера before_action, который собирает набор значений для использования.Идея здесь состоит в том, чтобы каждое значение в @list предлагалось пользователю в виде набора кнопок или группы кнопок.

Я смог заставить его передавать параметры с помощью radio_button,но это во многом потому, что позволяет использовать .radio_button, например так:

<%= form_for(@foo) do |f| %>
  <%= @list.each do |bar_suggestion| %>
    <%= f.radio_button :bar, bar_suggestion, value: bar_suggestion %><%= bar_suggestion>
  <% end %>
<% end %>

Однако, когда я пытаюсь вместо этого использовать «стандартную» кнопку начальной загрузки или группу btn, всякий раз, когда я пытаюсь установитьжелаемый хэш params с именем name, он не присоединяется к активному объекту формы, поэтому он не передается должным образом.

<%= form_for(@foo) do |f| %>
  <%= @list.each do |bar_suggestion| %>
    <button type="button" class="btn btn-primary" name="foo_params[bar]" value=<%= bar_suggestion %>><%= bar_suggestion %>
  <% end %>
<% end %>

Как сказать, чтобы он ссылался на объект формы?Я попытался использовать f.button вместо f.radio_button, но всякий раз, когда я нажимаю на него, он работает как кнопка отправки, поскольку он немедленно отправляет форму, а не просто представляет выбранную кнопку.

Этогде JavaScript вступает в игру?Есть ли способ сделать это без JS?

1 Ответ

0 голосов
/ 19 июня 2018

При работе со сложной формой, которая содержит много вложенных элементов, для того, чтобы выбор кнопки передавался в параметры, публикуемые с отправкой формы, для атрибута name используется ключ (то есть)

В моем конкретном случае я ошибочно предполагал, что прогресс объекта формы по цепочке моделей также применяется к входному тегу при каждом его использовании.

Итак, приведем конкретный пример.Даже если форма может выглядеть примерно так:

<%= form_for @object do |f| %>
  <%= f.fields_for :related_model_1 do |rm1| %>
    <%= rm1.fields_for :related_model_2 do |rm2| %>
      <%= rm2.fields_for :related_model_3 do |rm3| %>

... Когда приходит время настроить поля ввода для кнопок, для имени должен использоваться полный параметр «path».Таким образом, если related_model_3 имеет поле с именем «content», для которого мы хотим, чтобы выбор кнопки устанавливал значение, оно может выглядеть примерно так:

<input type="radio" name="object[rm1][rm2][rm3][content]" ... >

Затем, когда кнопка выбирается пользователем и формируетсябудет передано значение атрибута value, указанное с помощью кнопки, для пути параметра, указанного выше в атрибуте name.

Если вы когда-либо захотите перепроверить, что вы должны использовать дляатрибут name, настройте свою кнопку с помощью метода .radio_button (то есть rm3.radio_button), откройте страницу и используйте F12 для проверки, затем перейдите к соответствующему исходному коду, чтобы увидеть, какой атрибут имени был сгенерирован для radio_button.

Надеюсь, это поможет любому, кто может быть озадачен таким очевидным ответом!Еще раз спасибо @muistooshort за вашу первоначальную помощь и быстрый ответ на комментарий!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...