Rails Dropdown für Staaten auswählen?

73

Ich habe mich gefragt, ob vielleicht bereits eine Funktion für Schienen eingebaut ist, damit eine Auswahl-Dropdown-Liste mit allen US-Bundesstaaten erstellt wird, damit ich sie nicht manuell eingeben muss. Ich habe online gesucht, aber keine gefunden. Irgendwelche Vorschläge, was zu tun ist, damit ich nicht alle Zustände manuell eingeben muss?

Jake
quelle

Antworten:

143

eine Hilfsdatei

def us_states
    [
      ['Alabama', 'AL'],
      ['Alaska', 'AK'],
      ['Arizona', 'AZ'],
      ['Arkansas', 'AR'],
      ['California', 'CA'],
      ['Colorado', 'CO'],
      ['Connecticut', 'CT'],
      ['Delaware', 'DE'],
      ['District of Columbia', 'DC'],
      ['Florida', 'FL'],
      ['Georgia', 'GA'],
      ['Hawaii', 'HI'],
      ['Idaho', 'ID'],
      ['Illinois', 'IL'],
      ['Indiana', 'IN'],
      ['Iowa', 'IA'],
      ['Kansas', 'KS'],
      ['Kentucky', 'KY'],
      ['Louisiana', 'LA'],
      ['Maine', 'ME'],
      ['Maryland', 'MD'],
      ['Massachusetts', 'MA'],
      ['Michigan', 'MI'],
      ['Minnesota', 'MN'],
      ['Mississippi', 'MS'],
      ['Missouri', 'MO'],
      ['Montana', 'MT'],
      ['Nebraska', 'NE'],
      ['Nevada', 'NV'],
      ['New Hampshire', 'NH'],
      ['New Jersey', 'NJ'],
      ['New Mexico', 'NM'],
      ['New York', 'NY'],
      ['North Carolina', 'NC'],
      ['North Dakota', 'ND'],
      ['Ohio', 'OH'],
      ['Oklahoma', 'OK'],
      ['Oregon', 'OR'],
      ['Pennsylvania', 'PA'],
      ['Puerto Rico', 'PR'],
      ['Rhode Island', 'RI'],
      ['South Carolina', 'SC'],
      ['South Dakota', 'SD'],
      ['Tennessee', 'TN'],
      ['Texas', 'TX'],
      ['Utah', 'UT'],
      ['Vermont', 'VT'],
      ['Virginia', 'VA'],
      ['Washington', 'WA'],
      ['West Virginia', 'WV'],
      ['Wisconsin', 'WI'],
      ['Wyoming', 'WY']
    ]
end

in irgendeiner Form

<%= select_tag :state, options_for_select(us_states) %>
thenengah
quelle
NP. Dieses Zeug wird nicht in Schienen enthalten sein. Es ist nicht agnostisch und einschließlich aller Länder, Staaten usw. ist es überhaupt nicht schäbig.
Thenengah
Ich habe allerdings ein kleines Problem. Die Zustände werden in meiner Datei nicht angezeigt. irgendwelche Vorschläge? Ich bekomme nur ein leeres Auswahl-Dropdown-Feld. Vielleicht sollte ich es teilweise machen?
Jake
20
<%= select_tag :state, options_for_select(us_states) %>
thenengah
4
Wenn in einem Formular_für:= f.select :state, options_for_select(us_states),{}, class: 'form-control'
Robbie Guilfoyle
Das hat bei mir funktioniert. Irgendwelche Vorschläge, wie Sie dies für die Show-Ansicht umkehren können? In dem Formular können sie 'Arizona' auswählen und es wird in der Datenbank als 'AZ' aufgezeichnet. Auf der Ausstellungsseite wird es jedoch als "AZ" und nicht als "Arizona" angezeigt.
Christopher Warrington
30

Danke Codeglot. Falls jemand die 2-Buchstaben-Statusabkürzung anstelle des vollständigen Namens anzeigen möchte:

def us_states
  [
    ['AK', 'AK'],
    ['AL', 'AL'],
    ['AR', 'AR'],
    ['AZ', 'AZ'],
    ['CA', 'CA'],
    ['CO', 'CO'],
    ['CT', 'CT'],
    ['DC', 'DC'],
    ['DE', 'DE'],
    ['FL', 'FL'],
    ['GA', 'GA'],
    ['HI', 'HI'],
    ['IA', 'IA'],
    ['ID', 'ID'],
    ['IL', 'IL'],
    ['IN', 'IN'],
    ['KS', 'KS'],
    ['KY', 'KY'],
    ['LA', 'LA'],
    ['MA', 'MA'],
    ['MD', 'MD'],
    ['ME', 'ME'],
    ['MI', 'MI'],
    ['MN', 'MN'],
    ['MO', 'MO'],
    ['MS', 'MS'],
    ['MT', 'MT'],
    ['NC', 'NC'],
    ['ND', 'ND'],
    ['NE', 'NE'],
    ['NH', 'NH'],
    ['NJ', 'NJ'],
    ['NM', 'NM'],
    ['NV', 'NV'],
    ['NY', 'NY'],
    ['OH', 'OH'],
    ['OK', 'OK'],
    ['OR', 'OR'],
    ['PA', 'PA'],
    ['RI', 'RI'],
    ['SC', 'SC'],
    ['SD', 'SD'],
    ['TN', 'TN'],
    ['TX', 'TX'],
    ['UT', 'UT'],
    ['VA', 'VA'],
    ['VT', 'VT'],
    ['WA', 'WA'],
    ['WI', 'WI'],
    ['WV', 'WV'],
    ['WY', 'WY']
  ]
end
Brian
quelle
19

Dies ist eine detailliertere exemplarische Vorgehensweise. Ich benutze Rails 4:

Unter dem Helferordner habe ich state_helper.rb erstellt

Innerhalb von States_helper.rb:

module StatesHelper

def us_states
  [
    ['Alabama', 'AL'],
    ['Alaska', 'AK'],
    ['Arizona', 'AZ'],
    ['Arkansas', 'AR'],
    ['California', 'CA'],
    ['Colorado', 'CO'],
    ['Connecticut', 'CT'],
    ['Delaware', 'DE'],
    ['District of Columbia', 'DC'],
    ['Florida', 'FL'],
    ['Georgia', 'GA'],
    ['Hawaii', 'HI'],
    ['Idaho', 'ID'],
    ['Illinois', 'IL'],
    ['Indiana', 'IN'],
    ['Iowa', 'IA'],
    ['Kansas', 'KS'],
    ['Kentucky', 'KY'],
    ['Louisiana', 'LA'],
    ['Maine', 'ME'],
    ['Maryland', 'MD'],
    ['Massachusetts', 'MA'],
    ['Michigan', 'MI'],
    ['Minnesota', 'MN'],
    ['Mississippi', 'MS'],
    ['Missouri', 'MO'],
    ['Montana', 'MT'],
    ['Nebraska', 'NE'],
    ['Nevada', 'NV'],
    ['New Hampshire', 'NH'],
    ['New Jersey', 'NJ'],
    ['New Mexico', 'NM'],
    ['New York', 'NY'],
    ['North Carolina', 'NC'],
    ['North Dakota', 'ND'],
    ['Ohio', 'OH'],
    ['Oklahoma', 'OK'],
    ['Oregon', 'OR'],
    ['Pennsylvania', 'PA'],
    ['Puerto Rico', 'PR'],
    ['Rhode Island', 'RI'],
    ['South Carolina', 'SC'],
    ['South Dakota', 'SD'],
    ['Tennessee', 'TN'],
    ['Texas', 'TX'],
    ['Utah', 'UT'],
    ['Vermont', 'VT'],
    ['Virginia', 'VA'],
    ['Washington', 'WA'],
    ['West Virginia', 'WV'],
    ['Wisconsin', 'WI'],
    ['Wyoming', 'WY']
  ]
end
end

Unter config -> Umgebungen habe ich Folgendes in development.rb und Production.rb eingefügt

config.action_controller.include_all_helpers = true

Schließlich habe ich in meiner Ansicht (dies ist in Slim HTML getippt)

= form_for :order_submissions, url: order_url, html: { id: "order_form"} do |f|
fieldset
.form-group
  = f.select(:state, options_for_select(us_states, "CA"))

Die "CA" wählt Kalifornien im Dropdown-Menü beim Laden vor.

HINWEIS: Ich habe NICHT verwendet select_tag. Die Verwendung gab mir einen undefinierten Methodenfehler für select_tag(select_tag ist in den Ruby-Handbüchern, wie kann es undefiniert sein?) Die Verwendung hat gerade selectfunktioniert.

Fuzzybabybunny
quelle
18

Dafür verwende ich normalerweise die Edelsteine ​​Carmen und Carmen-Rails.

https://github.com/jim/carmen

https://github.com/jim/carmen-rails

Da meine Projekte immer noch alle auf Ruby 1.8 basieren, muss ich den spezifischen Ruby-18-Zweig verwenden, sodass ich in meiner Gemfile Folgendes habe:

gem 'carmen', :git => 'git://github.com/jim/carmen.git', :tag => 'ruby-18'
gem 'carmen-rails', :git => 'git://github.com/jim/carmen-rails.git'

Um dann das Auswahl-Tag für alle US-Bundesstaaten in einem Formular zu erstellen, in dem Sie das Feld: state_code eines: Adressmodellobjekts bearbeiten ...

subregion_select(:address, :state_code, Carmen::Country.coded('US'))
Zinnzahlen
quelle
6

Ich habe ein Problem mit der Verwendung eines Helfers gefunden, um die Zustände zu enthalten. Es funktioniert perfekt beim Erstellen eines neuen Datensatzes. Wenn ich jedoch einen vorhandenen Datensatz bearbeiten möchte, soll der Status in der Datenbank im Dropdown-Feld vorausgewählt werden. Ich konnte das mit dem Helfer nicht zum Laufen bringen. Es funktioniert jedoch, wenn Sie eine einfache Statustabelle erstellen. Folgendes hat bei mir funktioniert:

Erstellen Sie eine Statustabelle für die Auswahlfeldoptionen

Generieren Sie eine Statusmodelldatei und eine Datenbanktabelle, die nur Spalten für Statuscode und Statusname enthalten (oder wie auch immer Sie sie aufrufen möchten). rails g model State state_code:string:uniq state_name:string --no-timestamps --no-test-framework. Dadurch wird eine Migrationsdatei im Ordner db / migrate generiert. Wenn Sie keine ID-Spalte möchten, können Sie diese bearbeiten, indem Sie sie , id: falsein die Blockdeklaration create_table einfügen .

# db/migrate/timestamp_create_states.rb
class CreateStates < ActiveRecord::Migration
  def change
    create_table :states, id: false do |t|
      t.string :state_code, null: false
      t.string :state_name
    end
    add_index :states, :state_code, unique: true
  end
end

Und migrieren Sie die Datenbank rake db:migrate.

Sie können die Tabelle mit der Seed-Datei füllen. Stellen Sie sicher, dass Sie alle zuvor geladenen Daten in der Seed-Datei löschen oder auskommentieren, damit Sie keine Duplikate hinzufügen.

#db/seeds.rb
states = State.create!([
  { state_name: 'Alaska', state_code: 'AK' },
  { state_name: 'Alabama', state_code: 'AL' },
  { state_name: 'Arkansas', state_code: 'AR' },
  { state_name: 'Arizona', state_code: 'AZ' },
  { state_name: 'California', state_code: 'CA' },
  { state_name: 'Colorado', state_code: 'CO' },
  { state_name: 'Connecticut', state_code: 'CT' },
  { state_name: 'District of Columbia', state_code: 'DC' },
  { state_name: 'Delaware', state_code: 'DE' },
  { state_name: 'Florida', state_code: 'FL' },
  { state_name: 'Georgia', state_code: 'GA' },
  { state_name: 'Hawaii', state_code: 'HI' },
  { state_name: 'Iowa', state_code: 'IA' },
  { state_name: 'Idaho', state_code: 'ID' },
  { state_name: 'Illinois', state_code: 'IL' },
  { state_name: 'Indiana', state_code: 'IN' },
  { state_name: 'Kansas', state_code: 'KS' },
  { state_name: 'Kentucky', state_code: 'KY' },
  { state_name: 'Louisiana', state_code: 'LA' },
  { state_name: 'Massachusetts', state_code: 'MA' },
  { state_name: 'Maryland', state_code: 'MD' },
  { state_name: 'Maine', state_code: 'ME' },
  { state_name: 'Michigan', state_code: 'MI' },
  { state_name: 'Minnesota', state_code: 'MN' },
  { state_name: 'Missouri', state_code: 'MO' },
  { state_name: 'Mississippi', state_code: 'MS' },
  { state_name: 'Montana', state_code: 'MT' },
  { state_name: 'North Carolina', state_code: 'NC' },
  { state_name: 'North Dakota', state_code: 'ND' },
  { state_name: 'Nebraska', state_code: 'NE' },
  { state_name: 'New Hampshire', state_code: 'NH' },
  { state_name: 'New Jersey', state_code: 'NJ' },
  { state_name: 'New Mexico', state_code: 'NM' },
  { state_name: 'Nevada', state_code: 'NV' },
  { state_name: 'New York', state_code: 'NY' },
  { state_name: 'Ohio', state_code: 'OH' },
  { state_name: 'Oklahoma', state_code: 'OK' },
  { state_name: 'Oregon', state_code: 'OR' },
  { state_name: 'Pennsylvania', state_code: 'PA' },
  { state_name: 'Puerto Rico', state_code: 'PR' },
  { state_name: 'Rhode Island', state_code: 'RI' },
  { state_name: 'South Carolina', state_code: 'SC' },
  { state_name: 'South Dakota', state_code: 'SD' },
  { state_name: 'Tennessee', state_code: 'TN' },
  { state_name: 'Texas', state_code: 'TX' },
  { state_name: 'Utah', state_code: 'UT' },
  { state_name: 'Virginia', state_code: 'VA' },
  { state_name: 'Vermont', state_code: 'VT' },
  { state_name: 'Washington', state_code: 'WA' },
  { state_name: 'Wisconsin', state_code: 'WI' },
  { state_name: 'West Virginia', state_code: 'WV' },
  { state_name: 'Wyoming', state_code: 'WY' }
])

Führen Sie dann die Rechenaufgabe aus, um die Datenbank zu säen rake db:seed

In Ihrem Formular können Sie dies als Auswahlfeld hinzufügen (ich verwende state_code als Feldnamen, aber Sie können festlegen, dass es nur state oder was auch immer Sie möchten):

<%= f.label :state_code, 'State', class: 'control-label' %>
<%= f.collection_select(:state_code, State.select(:state_name, :state_code),
   :state_code, :state_name, {selected: 'CA'}, {class: 'form-control'}) %>

Das Hilfsmethodenformat collection_select in einem Rails-Formularblock lautet f.collection_select(method, collection, value_method, text_method, options = {}, html_options = {}). Wenn Sie state_code sowohl als Text als auch als Wert des Dropdown-Felds verwenden möchten, ändern Sie im ersten Auswahlargument und in der text_method den Wert: state_name in: state_code (beachten Sie, dass die Reihenfolge von Text und Wert umgekehrt ist). In den Optionen habe ich 'CA' vorausgewählt, aber nur für ein neues Formular, das nicht bearbeitet wurde (oder es überschreibt den Wert jedes Mal mit CA). Sie können dies in ein Leerzeichen ändern {include_blank: true}oder eine Eingabeaufforderung hinzufügen {prompt: 'Select State'}oder den ausgewählten oder ersten Wert mit einem leeren Hash als Standard festlegen {}. Wenn Sie das Feld erforderlich machen möchten, können Sie dies zu den HTML-Optionen hinzufügen{class: 'form-control', required: true}

Jetzt können Sie es in Ihrem Formular aus der Statustabelle ausfüllen und es wählt den Wert beim Bearbeiten eines Datensatzes vor.

Steve Carey
quelle
Ich finde diese Antwort am besten. Ich mag die Idee, Daten fest in den Code zu codieren, nicht.
Jason Swett
1
Ich denke, das ist übertrieben - die Staaten werden sich wahrscheinlich nicht ändern (ungeachtet der jüngsten politischen Ereignisse), so hart codiert ist es in Ordnung.
Elsurudo
Einverstanden, Hardcodierung mag in Ordnung sein, aber Steve hatte den Punkt, dass er versuchte, das Dropdown-Menü zu erhalten, um den Status vorzuwählen. Ich codiere mit Rails 5, und das habe ich getan. Ich habe vor dem Dropdown-Feld eine if-Anweisung eingerichtet, um zu überprüfen, ob der Status aufgezeichnet wurde oder nicht. Wenn es Null war, habe ich eine temporäre Variable auf einen Standardstatus meiner Wahl gesetzt. Wenn es aufgezeichnet wurde, habe ich die temporäre Variable auf diesen Zustand gesetzt. Dann habe ich die temporäre Variable in der Auswahl wie folgt aufgerufen: <%= f.select :state, options_for_select(us_states, @temp_state), id: :profile_state %>Nun, um herauszufinden, wie der vollständige Name des Status angezeigt wird.
Christopher Warrington
Hier ist der Code, mit dem ich die temporäre Variable festgelegt habe: <% if profile.state.nil? @temp_state = 'Arizona' else @temp_state = profile.state end %> Einzug und neue Zeilen werden in diesen Kommentaren leider nicht angezeigt.
Christopher Warrington
6

Damit das funktioniert simple_form, habe ich das gemacht.

Fügte dies meinem user.rbModell hinzu:

STATES = 
  [
    ['Alabama', 'AL'],
    ['Alaska', 'AK'],
    ['Arizona', 'AZ'],
    ['Arkansas', 'AR'],
    ['California', 'CA'],
    ['Colorado', 'CO'],
    ['Connecticut', 'CT'],
    ['Delaware', 'DE'],
    ['District of Columbia', 'DC'],
    ['Florida', 'FL'],
    ['Georgia', 'GA'],
    ['Hawaii', 'HI'],
    ['Idaho', 'ID'],
    ['Illinois', 'IL'],
    ['Indiana', 'IN'],
    ['Iowa', 'IA'],
    ['Kansas', 'KS'],
    ['Kentucky', 'KY'],
    ['Louisiana', 'LA'],
    ['Maine', 'ME'],
    ['Maryland', 'MD'],
    ['Massachusetts', 'MA'],
    ['Michigan', 'MI'],
    ['Minnesota', 'MN'],
    ['Mississippi', 'MS'],
    ['Missouri', 'MO'],
    ['Montana', 'MT'],
    ['Nebraska', 'NE'],
    ['Nevada', 'NV'],
    ['New Hampshire', 'NH'],
    ['New Jersey', 'NJ'],
    ['New Mexico', 'NM'],
    ['New York', 'NY'],
    ['North Carolina', 'NC'],
    ['North Dakota', 'ND'],
    ['Ohio', 'OH'],
    ['Oklahoma', 'OK'],
    ['Oregon', 'OR'],
    ['Pennsylvania', 'PA'],
    ['Puerto Rico', 'PR'],
    ['Rhode Island', 'RI'],
    ['South Carolina', 'SC'],
    ['South Dakota', 'SD'],
    ['Tennessee', 'TN'],
    ['Texas', 'TX'],
    ['Utah', 'UT'],
    ['Vermont', 'VT'],
    ['Virginia', 'VA'],
    ['Washington', 'WA'],
    ['West Virginia', 'WV'],
    ['Wisconsin', 'WI'],
    ['Wyoming', 'WY']
  ]

Die simple_form hat meiner Ansicht nach Folgendes verwendet:

<%= simple_form_for(@user) do |f| %>    
    <%= f.input :state, as: :select, collection: User::STATES %>
    <%= f.button :submit %>
<% end %>
gelb regieren
quelle
4

Falls dies nicht funktioniert:

<%= select_tag :state, us_states%>

Versuche dies :

 <%=select_tag 'State', options_for_select(us_states),:name=>"state",:id=>"state"%>
Sachin Prasad
quelle
Ich verwende Rails 3 und dies musste ich tun, damit diese Methode funktioniert. Fantastische Antwort Sachin.
Shawn Deprey
3

Sie haben ein Juwel, das Ihnen helfen kann: das Länderjuwel , das in country_select integriert ist , sodass Sie eine vollständige Lösung für die Eingabe von Staaten haben.

Auch wenn Sie die Edelsteinabhängigkeitsliste reduzieren möchten, können Sie einfach Folgendes tun:

 <%= f.select :country_code, ::ISO3166::Country.all_names_with_codes,{ include_blank: true } %>
Paulo Fidalgo
quelle
1

Überprüfen Sie diese https://rubygems.org/gems/country_state_select

Country State Select ist eine Bibliothek, die eine einfache API zum Generieren von Dropdowns für Land, Bundesland / Provinz und Stadt zur Verwendung in Formularen bietet.

Bei korrekter Implementierung wird eine Dropdown-Liste für Bundesstaat / Provinz mit geeigneten Regionen gefüllt, je nachdem, welches Land ein Benutzer ausgewählt hat.

Wenn ein Benutzer beispielsweise "Vereinigte Staaten von Amerika" für ein Dropdown-Menü "Land" auswählt, wird das Dropdown-Menü "Bundesstaat" mit den 50 entsprechenden Bundesstaaten sowie dem District of Columbia gefüllt. Dann kann der Benutzer die Stadt gemäß der Auswahl des Bundesstaates auflisten, aber derzeit sind die Städte begrenzt.

Arvind
quelle
0

Ich weiß nicht, ob es etwas eingebautes Rails gibt, um ein HTML-Auswahlfeld mit US-Bundesstaaten zu erstellen.

Aber hier haben Sie einen Screencast, der dies erklärt: http://railscasts.com/episodes/88-dynamic-select-menus

Ich hoffe es wird nützlich sein.

Israel
quelle
Frühere Versionen von Rails enthielten ausgewählte Tag-Helfer mit Staaten- und Länderlisten, aber wie Codeglot hervorhebt, war es nicht angemessen agnostisch und wurde entfernt. Es ist so einfach wie das Kopieren seines Codes :-). Beachten Sie auch, dass der verlinkte Railscast aktualisiert wurde.
Tom Harrison
0

Wenn Sie den Status unter vollem Namen speichern möchten

# frozen_string_literal: true

module StateHelper

  def us_states
    [
      ['Alabama'],
      ['Alaska'],
      ['Arizona'],
      ['Arkansas'],
      ['California'],
      ['Colorado'],
      ['Connecticut'],
      ['Delaware'],
      ['District of Columbia'],
      ['Florida'],
      ['Georgia'],
      ['Hawaii'],
      ['Idaho'],
      ['Illinois'],
      ['Indiana'],
      ['Iowa'],
      ['Kansas'],
      ['Kentucky'],
      ['Louisiana'],
      ['Maine'],
      ['Maryland'],
      ['Massachusetts'],
      ['Michigan'],
      ['Minnesota'],
      ['Mississippi'],
      ['Missouri'],
      ['Montana'],
      ['Nebraska'],
      ['Nevada'],
      ['New Hampshire'],
      ['New Jersey'],
      ['New Mexico'],
      ['New York'],
      ['North Carolina'],
      ['North Dakota'],
      ['Ohio'],
      ['Oklahoma'],
      ['Oregon'],
      ['Pennsylvania'],
      ['Puerto Rico'],
      ['Rhode Island'],
      ['South Carolina'],
      ['South Dakota'],
      ['Tennessee'],
      ['Texas'],
      ['Utah'],
      ['Vermont'],
      ['Virginia'],
      ['Washington'],
      ['West Virginia'],
      ['Wisconsin'],
      ['Wyoming']
    ]
  end
end

Und dann in Form

<%= f.select :state, options_for_select(us_states), class:"form-control", required: true %>

gsumk
quelle
0

Verwenden Sie einen Hash. Ich habe meine in config / initializers / us_states.rb abgelegt , aber es funktioniert in einem Helfer oder fast überall dort, wo Sie es bevorzugen:

US_STATES = {
  'AL': 'Alabama',
  'AK': 'Alaska',
  'AZ': 'Arizona',
  'AR': 'Arkansas',
  'CA': 'California',
  'CO': 'Colorado',
  'CT': 'Connecticut',
  'DE': 'Delaware',
  'DC': 'District of Columbia',
  'FL': 'Florida',
  'GA': 'Georgia',
  'HI': 'Hawaii',
  'ID': 'Idaho',
  'IL': 'Illinois',
  'IN': 'Indiana',
  'IA': 'Iowa',
  'KS': 'Kansas',
  'KY': 'Kentucky',
  'LA': 'Louisiana',
  'ME': 'Maine',
  'MD': 'Maryland',
  'MA': 'Massachusetts',
  'MI': 'Michigan',
  'MN': 'Minnesota',
  'MS': 'Mississippi',
  'MO': 'Missouri',
  'MT': 'Montana',
  'NE': 'Nebraska',
  'NV': 'Nevada',
  'NH': 'New Hampshire',
  'NJ': 'New Jersey',
  'NM': 'New Mexico',
  'NY': 'New York',
  'NC': 'North Carolina',
  'ND': 'North Dakota',
  'OH': 'Ohio',
  'OK': 'Oklahoma',
  'OR': 'Oregon',
  'PA': 'Pennsylvania',
  'PR': 'Puerto Rico',
  'RI': 'Rhode Island',
  'SC': 'South Carolina',
  'SD': 'South Dakota',
  'TN': 'Tennessee',
  'TX': 'Texas',
  'UT': 'Utah',
  'VT': 'Vermont',
  'VA': 'Virginia',
  'WA': 'Washington',
  'WV': 'West Virginia',
  'WI': 'Wisconsin',
  'WY': 'Wyoming'
}

Dann in meiner Form:

<%= form.select :state, US_STATES.invert.sort %>

Da der aus zwei Buchstaben bestehende Code gespeichert ist, verweise ich, wenn ich den Namen des Status anzeigen möchte, nur auf den aus zwei Buchstaben bestehenden Schlüssel im Hash:

<%= US_STATES[state] %>

Wenn Sie wirklich schick werden möchten, initialisieren Sie sie in einer Gebietsschemadatei (z. B. config / locales / en.yml ):

---
en:
  us_states:
    AL: Alabama
    AK: Alaska
    AZ: Arizona
    # etc.

Und greifen Sie in Ihren Ansichten darauf zu mit:

<%= t "us_states.#{state}" %>

ℹ️ Dies funktioniert tatsächlich besser mit Länder- und Sprachcodes, wenn Sie mehrere Sprachen in Ihrer App unterstützen.

Partydrone
quelle