Заполните форму. выберите с помощью флажков и данных из другой модели в Rails

#ruby-on-rails

Вопрос:

У меня есть модель продукта и модель категории в проекте Ruby on Rails. Модель продукта, которую я указал has_many :categories , и внутри product_controller.rb в действии создания я создал переменную @categories = Category.all . Категориями могут быть такие вещи, как «Зима, лето, весна, шерсть, пряжа, хлопок и т. Д.», Как я мог бы использовать эти значения для объединения выбора с флажками внутри, чтобы иметь возможность создавать новый продукт, с которым связаны эти категории? Я пробовал несколько способов, но не могу понять.

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

1. Вы запрашиваете элемент выбора, у которого есть флажки в качестве элементов списка, да? У Rails нет помощника, который работает таким образом, поскольку HTML не допускает флажки в качестве элементов списка. Однако вы можете найти похожие вещи в библиотеках, таких как bootstrap .

2.Итак, вас, похоже, спрашивают либо (или оба!) о двух разных вещах: (1) как вы создаете список select options из своей модели; или (2) как вы оформляете список select options так, чтобы они выглядели как флажки. Какая из них является вашей главной проблемой прямо сейчас? Как уже сказал @MarsAtomic: флажков нет select options в HTML.

3. @MarsAtomic я думаю, что моя проблема — первая, но дело в том, что мне нужно выбрать несколько значений для сопоставления, а не только одно

Ответ №1:

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

У тега выбора HTML есть multiple опция, и документация API показывает, как это работает:

select(object, method, choices = nil, options = {}, html_options = {}, amp;block) public

Раздел html_options подписи метода — это то место, где вы хотите передать multiple параметр. В вашем случае это было бы что-то вроде этого:

<%= form.select(:categories, @categories, {}, { multiple: true} ) %>

Хэш параметров, который вы получаете в вашем контроллере create или update должен содержать params[:categories] хэш выбранных пользователем параметров.