Флажки для сквозного 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 для непроверенных элементов.
Другие вопросы по тегам