2017-01-24 4 views
0

In den Schienen guide, gibt es ein Beispiel für die Verwendung von "builder" zum Rendern inline. Was ist dieser Baumeister und was macht er? Ist es eine Art Edelstein, mit dem du inline xml anstelle des üblichen erb erstellen kannst?Was macht der Rails Builder?

render inline: "xml.p {'Horrid coding practice!'}", type: :builder 
+0

https://github.com/jimweirich/builder – max

Antwort

1

Die Builder Edelstein ist eine Abhängigkeit der Schienen ActionView Komponente. Es bietet eine einfache Möglichkeit zum programmatischen Erstellen von XML-Dokumenten und Fragmenten.

In Rails wird es für XML-Serialisierung in ActiveSupport (für Hashes) und ActiveModel verwendet.

Ist es eine Art von Edelstein, mit dem Sie Inline-XML statt der üblichen Erb bauen?

Die primäre Verwendung von Builder erstellt nicht Inline-XML - das ist nur eine Funktion, die niemand wirklich verwendet. Stattdessen können Sie Ihre eigenen Serialisierer erstellen oder ändern, wie Ihre Modelle serialisiert werden.

Die Kommentare in der Quelle für ActiveRecord::Serialzers::XmlSerializer erklären diese Nutzung ziemlich gut:

# Alternatively, you can yield the builder object as part of the to_xml call: 
firm.to_xml do |xml| 
    xml.creator do 
    xml.first_name "David" 
    xml.last_name "Heinemeier Hansson" 
    end 
end 

du mit ERB Kontrast können, die für den Bau Vorlagen gut, aber nicht so gut für wiederverwendbare Komponenten bauen oder mit Datenstrukturen handelt.

+0

Ich wäre nicht überrascht, wenn XML-Serialisierung in naher Zukunft aus dem Schienen-Kern entfernt wird. Parsing von XML-Params wurde an ein externes Juwel delegiert und ist ein Merkmal, das immer weniger verwendet wird, seit JSON den Krieg ziemlich gewonnen hat. – max

+0

Danke! Was bedeutet es, dass ein Modell serialisiert wird (oder etwas, das serialisiert werden soll)? Mein Verständnis ist, dass es etwas ist, das automatisch von Rails gemacht wird, wenn Sie Objekte in der DB speichern, so dass sie es wieder durch AR finden können, wenn Sie es abrufen? – stackjlei

+1

Serialisierung bedeutet Konvertieren von Daten in ein anderes Format - wie JSON oder XML. Dies können entweder Hashes oder vollständige Modelle sein (oder eine Sammlung von Modellen). Es gibt auch Serialisierung von Attributen - worüber Sie sprechen. Hier können Sie Daten wie Hashes in einer einzelnen Textdatenbankspalte speichern, indem Sie sie in YAML oder JSON konvertieren. Dies wird jedoch nicht so oft verwendet, wie Postgres und MySQL native JSON-Typ-Spalten haben, die Abfragen erlauben. – max