3 votes

comment créer une liste déroulante à partir d'un hash dans rails 3

Dans rails 3, comment créer une Dropdown à partir d'un hachage

J'ai le code suivant dans ma classe Utilisateur

class User
  ...   other codes
  key :gender, Integer    # i use mongo db

  class << self
    def genders()
      genders = {
        '1' => 'Male',
        '2' => 'Female',
        '3' => 'Secret'
      }
    end
  end

end

Dans le formulaire de l'utilisateur, j'essaie de créer une liste déroulante par sexe.

<%= f.collection_select nil, :gender, User.genders, :key, :value %>

mais il se plaint

undefined method `merge' for :value:Symbol

Quelle est donc la bonne façon de créer la liste déroulante ?

Gracias

7voto

Michaël Witrant Points 4258

Cela devrait fonctionner :

<%= f.collection_select :gender, User.genders, :first, :last %>

Modifier : Explications :

collection_select appellera each sur l'objet que vous donnez ( User.genders ici) et les deux méthodes ( first y last ici) sur chaque objet. C'est à peu près équivalent à quelque chose comme ça :

User.genders.each do |object|
  output << "<option value=#{object.first.inspect}>#{h object.last}</option>"
end

Lorsque vous appelez each sur un hachage il donne un Array de deux valeurs (la clé et la valeur). Ces valeurs peuvent être récupérées avec la fonction first y last méthodes.

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