0

Ich möchte in der Lage sein, ein Feature in einem Webprogramm zu erstellen, um eine Inspektion zu erstellen. Die Inspektion hat viele Prüfpunkte. Ich möchte inspection_items mit einer ersten Anzahl von Elementen füllen, aber dem Benutzer erlauben, die Standardelemente hinzuzufügen oder zu löschen. Vom architektonischen Standpunkt aus weiß ich wirklich nicht, wie man das effektiv erledigen kann. Ich begann damit, das inspection_item-Modell zu haben und die Liste aus einem Hash zu erstellen, der in einer Konstanten gespeichert ist, aber die Liste nicht dynamisch machen wird.rails: Wie man ein Modell auffüllt, das einem Benutzer eine Reihe von Standardsätzen zur Verfügung stellt, während sie mehr hinzufügen können

class InspectionList < ApplicationRecord 
belongs_to :workorder 


    DEFAULTQUESTIONS = %w[{item_name: "Blablabla"}, 
    {item_name:"Loremipsumboardhordic"}, {item_name: "Satir quajnami grolose"} ] 


def initialize(DEFAULTQUESTIONS) 
    InspectionList.create(DEFAULTQUESTIONS) 
end 


end 
+0

Erstellen Sie einfach Spalten für Elemente, die sie aktualisieren sollen, wie: Tag der Woche, dann erstellen Sie ein Formular und geben Sie ihnen Erlaubnis zu Crud: Wochentag ?? Wenn Sie möchten: Wochentag auf Montag voreingestellt können Sie etc –

Antwort

0

Wenn ich mich richtig zu verstehen, müssen Sie zuerst eine Tabelle und Modell für die Inspektion Artikel hinzufügen:

class InspectionItem < ApplicationRecord 
    belongs_to :inspection_list 
end 

class InspectionList < ApplicationRecord 
    has_many :inspection_items 
end 

Wenn dann präsentiert eine neue Inspektionsliste für den Benutzer (zB in den new Controller

@inspection_list = InspectionList.new 
@inspection_list.add_default_items 

wo: Aktion in inspection_lists_controller), können Sie die ersten Standard Prüfobjekte und sie an die neue Inspektionsliste aufbauenhat das Gebäude der beigefügten Gegenstände selbst (und ich würde dies wahrscheinlich im InspectionList Modell setzen), und ja, eine Konstante ein geeigneter Ort für sich ist:

# app/models/inspection_list.rb 
DEFAULT_ITEMS = [{item_name: "Blablabla"}, 
       {item_name:"Loremipsumboardhordic"}, 
       {item_name: "Satir quajnami grolose"} ] 

def add_default_items 
    DEFAULT_ITEMS.each do |item| 
    self.inspection_items.build(item) 
    end 
end 

Die build Methode ist documented e.g. here und legt die neu erstellter Assoziationssatz (Inspektionsartikel) zum Hauptsatz (Inspektionsliste).

+0

Ihre Lösung macht Sinn, aber ich bekomme die folgende Nachricht: Beim Zuweisen von Attributen müssen Sie einen Hash als Argument übergeben. und das Problem ist in dieser Zeile: selb.inspection_items.build (item) Irgendeine Idee warum? –

+0

Aha, Entschuldigung, du musst das '% w' aus deiner' DEFAULT_ITEMS' Definition entfernen, ich habe es beim Kopieren zwischengespeichert. Dann sollte es funktionieren. Das '% w' wird verwendet, um ein Array aus durch Leerzeichen getrennten Symbolen zu definieren, was nicht der Fall des Arrays von Hashes ist, das dort verwendet wird. – BoraMa