Флажки для сквозного has_many, с дополнительным атрибутом таблицы соединений
У меня есть has_many :through
связь между некоторыми моделями, которые определяют, какие наборы данных видны на определенных панелях мониторинга.
class Dashboard < ActiveRecord::Base
has_many :dashboard_datasets
has_many :datasets, :through => :dashboard_datasets
end
class DashboardDataaset < ActiveRecord::Base
belongs_to :dashboard
belongs_to :dataset
end
class Dataset < ActiveRecord::Base
has_many :dashboard_datasets
has_many :dashboards, :through => :dashboard_datasets
end
Форма для создания нового Dashboard
затем имеет простой набор флажков с именем dataset_ids[]
чтобы позволить вам выбрать, какие уже существующие наборы данных я хочу отображать на этой панели.
class DashboardForm < Reform::Form
model: :dashboard
property :name
property :description
collection :dataset_ids
end
Пока все просто...
Однако сейчас я собираюсь добавить дополнительную ассоциацию в таблицу соединений, чтобы определить "макет", который следует использовать для этого набора данных на данной панели мониторинга. т.е. сетка, таблица, список. так далее
class Layout < ActiveRecord::Base
has_many :dashboard_datasets
end
class DashboardDataaset < ActiveRecord::Base
belongs_to :dashboard
belongs_to :dataset
belongs_to :layout
end
Теперь я хочу адаптировать свою форму панели мониторинга, чтобы в дополнение к флажкам для каждого установленного флажка набора данных для меня было поле выбора, чтобы выбрать макет, который будет использоваться в данной данной ассоциации.
С чего бы мне начать? Разверните collection
на объекте формы быть богаче и включать больше информации?
Очень ценю любой совет.
1 ответ
Нашел хороший пример здесь по ok32
Ключевые части информации:
- Настроить стандартную ассоциацию has_many, factory -> factory_color -> color
- использовать acceptpts_nested_attributes_for на factory_color
- Создайте временный список моделей с моделью для каждого флажка. (factory.all_colors)
- Используйте функцию fields_for, где вы можете передать ассоциацию, и отдельный список моделей, например fields_for:factory_colors, @factory.all_colors do |fc| ...
- Добавьте в контроллер фильтр before для установки атрибута _destroy для непроверенных элементов.