74 votes

Rails Select Drop Down pour les États ?

Je me demandais s'il n'existait pas une fonction déjà intégrée pour les rails qui créerait une liste déroulante avec tous les États américains afin que je n'aie pas à les saisir manuellement. J'ai fait des recherches en ligne mais je n'en ai pas trouvé. Avez-vous des suggestions sur ce qu'il faut faire pour que je n'aie pas à saisir manuellement tous les États ?

143voto

Dark Passenger Points 18408

Un fichier d'aide

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

sous une forme ou une autre

<%= select_tag :state, options_for_select(us_states) %>

0 votes

NP. Ce genre de choses ne va pas être inclus dans rails. Ce n'est pas agnostique et inclure tous les pays, états, etc... n'est pas du tout ferroviaire.

0 votes

J'ai un petit problème cependant. les états n'apparaissent pas dans mon fichier. des suggestions ? j'obtiens juste une boîte déroulante de sélection vide. peut-être que je devrais en faire une partielle ?

20 votes

<%= select_tag :state, options_for_select(us_states) %>

30voto

Sooie Points 398

Merci Codeglot. Au cas où quelqu'un voudrait afficher l'abréviation à deux lettres de l'État au lieu du nom complet :

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

18voto

Tinynumbers Points 171

Pour cela, j'utilise généralement les gemmes Carmen et Carmen-Rails.

https://github.com/jim/carmen

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

Comme mes projets sont encore tous sur Ruby 1.8, je dois utiliser la branche spécifique ruby-18, donc j'ai ce qui suit dans mon Gemfile :

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

Ensuite, pour créer la balise de sélection de tous les États américains dans un formulaire où vous modifiez le champ :state_code d'un objet du modèle :address...

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

18voto

fuzzybabybunny Points 421

Voici une présentation plus détaillée. J'utilise Rails 4 :

Dans le dossier helpers, j'ai créé states_helper.rb

Dans 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

Sous config -> environnements j'ai mis ce qui suit dans development.rb et production.rb

config.action_controller.include_all_helpers = true

Enfin, à l'intérieur de ma vue, j'ai mis (c'est tapé en Slim HTML)

= 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"))

Le "CA" présélectionne la Californie dans le menu déroulant au chargement.

NOTE : Je n'ai PAS utilisé select_tag . L'utiliser m'a donné une erreur de méthode non définie pour select_tag (select_tag est dans les guides Ruby, comment peut-il être indéfini ?) En utilisant seulement select l'ont fait fonctionner.

4voto

Sachin Prasad Points 2054

Au cas où celle-ci ne fonctionnerait pas :

<%= select_tag :state, us_states%>

Essayez ceci :

 <%=select_tag 'State', options_for_select(us_states),:name=>"state",:id=>"state"%>

0 votes

J'utilise Rails 3 et voici ce que j'ai dû faire pour que cette méthode fonctionne. Une réponse fantastique, Sachin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X