2016-11-03 4 views
0

Wie kann ich am besten mit Sammlungen für die Eingabe in Formularen arbeiten? Ich benutze sie in verschiedenen Formen wieder. d. h. wo zu lagern und wie auf DRY-Art zu verwenden?Schienen - wie Sie Sammlungen für Formulare speichern

Beispiele

  • Sammlung: [ "NL", "DE"] - das ist Cross-Modell
  • Sammlung: Annotation.order (: name) .wo (: sender => @document. sender_id,: dokumenttyp => @ document.documenttype_id) - dynamic/auf andere Attribute der Instanz

Vielen Dank für Ihre Hilfe.

Antwort

1

Grundsätzlich möchten Sie Daten zwischen Ihren Ansichten teilen? Die einfachste Lösung wäre, Hilfsmethoden in ApplicationHelper zu definieren.

module ApplicationHelper 
    def languages 
    [:NL, :EN] 
    end 

    def document_annotations(sender_id, document_type_id) 
    Annotation.order(:name).where(:sender => sender_id, :documenttype => document_type_id) 
    end 
end 

Auf der anderen Anmerkung scheint es, dass Ihr Array logisch zu einer Ihrer Klassen in Ihrer Domäne gehören könnte. Wenn es eine Klasse, die kann es gehört dann Konstanten zu verwenden:

class SomeModelProbably 
    LANGS = [:NL, :EN] 
end 

# Then access it like this: 
SomeModelProbably::LANGS 

Auch dass Annotation Filterung wäre wahrscheinlich besser als Bereich neu geschrieben werden:

class Annotation 
    scope :by_sender_and_doc_type, ->(doc) { order(:name).where(:sender => doc.sender_id, :documenttype => doc.document_type_id) } 
end 

# Then access it like this: 
Annotation.by_sender_and_doc_type(@document) 
+0

Wie würde ich die Sprachen zugreifen, wenn gespeichert in der 'ApplicationHelper' –

+0

Rufen Sie einfach diese Hilfsmethode in Ihrer Sicht auf. – Uzbekjon

+0

wie funktioniert das? Ich verwende die einfache Form '<% = f.input: locale_language, label: 'Doc. Sprache ', Sprachen, Eingabeaufforderung:' Sprache auswählen '%> 'funktioniert nicht –

Verwandte Themen