Рельсы образуют флажки смешивания и переключатели с одним и тем же параметром

#ruby-on-rails

Вопрос:

В моей форме у меня есть :option_ids , которая передает список идентификаторов обратно в модель для создания ассоциаций с применимыми параметрами. В моем случае существуют группы опций, позволяющие пользователю выбирать любую комбинацию опций.

В настоящее время у меня есть это в моей форме:

  - @option_groups.each do |group|
  - unless group.options.blank?
    .form
      h3 = group.name
      .checkboxes
        = line_item.collection_check_boxes :option_ids, group.options, :id, :name_and_price do |option|
          .checkbox.horizontal
            = option.check_box(class: "check")
            = image_tag option.object.photo.variant(resize: "65x65") if option.object.photo.attached?
            = option.label
 

Недавно мы добавили условие в модель OptionGroup, позволяющее пользователям определять, можно ли выбрать несколько параметров из этой группы опций(флажки) или только один(переключатели).

Мне интересно, есть ли способ, которым я все еще могу заполнить параметр :option_ids, используя комбинацию флажков и переключателей. Я пробовал следующее, но это портит хэш параметров

  -@option_groups.each do |group|
  - unless group.options.blank?
    .form
      h3 = group.name

      - if group.multiple?
        .checkboxes
          = line_item.collection_check_boxes :option_ids, group.options, :id, :name_and_price do |option|
            .checkbox.horizontal
              = option.check_box
              = image_tag option.object.photo.variant(resize: "65x65") if option.object.photo.attached?
              = option.label

      - else
        span Please select one
        .checkboxes
          = line_item.collection_radio_buttons :option_ids, group.options, :id, :name_and_price do |option|
            .checkbox.horizontal
              = option.radio_button
              = image_tag option.object.photo.variant(resize: "65x65") if option.object.photo.attached?
              = option.label
 

Кто — нибудь сталкивался с подобным сценарием раньше? Как бы кто-то условно навязал эксклюзивность, не испортив при этом другие идентификаторы в атрибуте формы?

Комментарии:

1. Проблема фреймворка: в первую очередь не имеет смысла использовать option_ids , если может быть только одно значение. Кроме того, вы, вероятно, должны использовать fields_for для определения области входных данных, но это действительно не имеет никакого отношения к вашей ситуации с флажком и радиосвязью.

2. да, я пошел дальше и переключился на использование collection_check_boxes и использование JS только для выборочного обеспечения эксклюзивности. Я пока оставляю это, потому что у кого-то может быть хорошее решение, которое будет ценным для сообщества.