2016-04-11 7 views
1

Ich versuche, eine App in Rails 4 zu erstellen. Ich verwende ein einfaches Formular für Formulare.Rails 4 -Einfache Form, wie Schlüssel zu speichern und Wert anzuzeigen

Ich habe ein Attribut namens "self_governance" in meinem Modell.

Ich habe eine Hilfsmethode geschrieben, so dass ich 5 Ebenen definieren kann, die für dieses Attribut gespeichert werden können, aber dem Benutzer als Optionen angezeigt werden (statt Nummern 1 .. 5).

In meinem Helfer, ich habe:

module PreferencesHelper 

    def self_gov_selector 
     [ 
      [ 'tier 1','1'], 
      [ 'tier 2','2'], 
      [ 'tier 3','3'], 
      [ 'tier 4','4'], 
      [ 'tier 5','5'], 
     ] 
    end 

In meiner Form, ich habe dann:

<%= f.input :self_governance, :label => "Select your tier", collection: self_gov_selector %> 

Dann in meiner Show, ich versuche, herauszufinden, wie angezeigt ‚Tier 1 'statt' 1 '.

Ich habe versucht:

<%= @preference.self_governance %> 

<%= @preference.self_gov_selector %> 

ich nichts finden, das funktioniert. Sie alle zeigen in den Ansichten 1 statt Tier 1 an.

Wie kann ich das schaffen?

Antwort

0

Die params des Formulars wird nur den zweiten Wert im Array enthalten, so dass Sie wahrscheinlich Ihren Wert als Integer in Ihrer Datenbanktabelle speichern.

Eine einfache Lösung ist es, eine enum zu verwenden, um die ganzen Zahlen abzubilden Sie auf die Werte sind speichern sie repräsentieren:

In Ihrem Modell Vorlieben:

enum self_governance: { 
          tier_1: 1, 
          tier_2: 2, 
          tier_3: 3, 
          tier_4: 4, 
          tier_5: 5 
         } 

Dann ist Ihre Ansicht entsprechend aktualisieren :

<%= @preference.self_governance.try(:humanize) %> 

EDIT:

Ein zusätzlicher Vorteil dieses Ansatzes ist, dass Sie Ihre Hilfsmethode mit dem Aufruf der ENUM direkt ersetzen:

f.input :self_governance, as: :select, label: "your label", collection: Preference.self_governances.map { |key, val| [key.humanize, val] } 
+0

Vielen Dank! – Mel

+0

Eigentlich - wenn ich das versuche, bekomme ich diesen Fehler: undefinierte Methode 'self_governance 'für # Meinst du? self_governances – Mel

+0

Ja: 'Preference.self_governances.map {| key, val | [key.humanize, val]} sollte funktionieren. Entschuldigung wegen der verzögerten Antwort. –