2017-09-21 4 views
0

Ich habe eine has_many :through Assoziation zwischen einigen Modellen, die bestimmen, welche Datensätze auf bestimmten Dashboards sichtbar sind.Checkboxen für has_many through, mit zusätzlichen Join-Tabelle Attribut

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 

Das Formular für einen neuen Dashboard dann die Schaffung hat einen einfachen Satz von Kontrollkästchen namens dataset_ids[], damit Sie die vorbestehenden Datensätze ich an diesem Armaturenbrett angezeigt werden soll auszuwählen.

class DashboardForm < Reform::Form 
    model: :dashboard 

    property :name 
    property :description 
    collection :dataset_ids 
end 

So weit, so einfach ...

ich jetzt aber suche eine zusätzliche Assoziation zu der Join-Tabelle hinzuzufügen, das ‚Layout‘ zu bestimmen, die für verwendet werden sollen dieser Datensatz auf dem gegebenen Dashboard. d.h. Raster, Tabelle, Liste. etc

class Layout < ActiveRecord::Base 
    has_many :dashboard_datasets 
end 

class DashboardDataaset < ActiveRecord::Base 
    belongs_to :dashboard 
    belongs_to :dataset 
    belongs_to :layout 
end 

Ich möchte jetzt meine Armaturenbrett Form anzupassen, so dass auf die Kontrollkästchen für jeden Datensatz Kontrollkästchen neben der ausgewählt wird, gibt es eine Select-Box ist für mich das Layout zu wählen, um auf dieser gegeben werden Verband.

Wo fange ich an? Erweitern Sie die collection auf dem Formularobjekt, um reicher zu sein und mehr Informationen zu enthalten?

Sehr zu schätzen jeden Hinweis.

Antwort

0

Found a good example here von 0k32

Die Schlüsselinformationen sind:

  • einen Standard has_many Verband einrichten, Fabrik -> factory_color -> Farbe
  • Verwendung accepts_nested_attributes_for auf factory_color
  • a Erstellen temporäre Modellliste, mit einem Modell für jedes Kontrollkästchen. (factory.all_colors)
  • Verwenden Sie eine fields_for-Funktion, mit der Sie die Zuordnung bestehen können, und eine separate Liste der Modelle, z. fields_for: factory_colors, @ factory.all_colors do | fc | ...
  • Fügen Sie einen Vorfilter in den Controller ein, um das _destroy-Attribut für ungeprüfte Elemente festzulegen.
Verwandte Themen