web-dev-qa-db-fra.com

Rails 3: f.select - options_for_select

J'ai un formulaire sur mon Ruby sur l'application Rails3 avec un menu déroulant, voici mon code actuel pour l'option de sélection:

<%= f.select :phone_type, options_for_select(["Select One", "Cell", "Work", "Office", "Home", "Other"],:disabled => ["Select One"]), :class => 'genForm_dropBox' %>

D'après ce que j'ai compris, cela devrait avoir "Sélectionner un" comme option par défaut lorsque quelqu'un ouvre la page, mais s'il ne sélectionne pas l'une des autres options, une erreur s'affiche quand il appuie sur soumettre.

Cela est vrai dans les navigateurs comme Safari et Chrome et IE7, mais dans Firefox et IE8, il affiche "Cell" comme première option car Select One est désactivé.

Je voudrais qu'il affiche "Select One" par défaut, mais je l'ai comme option inutilisable lorsqu'ils soumettent le formulaire. Dois-je l'écrire dans le contrôleur ou le modèle? ou est-ce que j'ai mal codé le formulaire?

31
mediarts

pour ceux qui cherchent à intégrer cette fonctionnalité, j'ai adopté une nouvelle approche depuis la fin du modèle. Étant donné que tous les champs doivent être remplis pour que l'utilisateur soumette et ne reçoive pas d'alerte d'erreur, j'ai donné à l'option "Soumettre un" une valeur par défaut de rien. Vous pouvez jeter un oeil au code suivant pour voir comment je l'ai fait.

<%= f.select :phone_type, options_for_select([["Select One", ""], "Cell", "Work", "Office", "Home", "Other"]), :class => 'genForm_dropBox' %>
32
mediarts

C'est un peu plus propre:

<%= f.select :phone_type, [ 'Cell', 'Work', 'Office', 'Home', 'Other' ], :Prompt => 'Select One' %>

L'argument: Prompt génère une option avec une valeur vide.

20
danblaker

Dans Rails 4, cette approche fonctionne bien pour moi.

<%= f.select :status, options_for_status, {}, Prompt: 'Select One' %>

Pendant ce temps, j'ai défini les options dans une aide pour garder l'encombrement hors de ma vue.

def options_for_status
  [
    ['First Option','first_option'],
    ['Second Option','second_option']
  ]
end
12
rb-

Merci à tous ceux qui ont répondu.

J'avais besoin d'un code similaire pour un projet sur lequel je travaille et j'ai vraiment aimé l'approche de Ryan Burnette.

C'est ce qui a fonctionné pour moi en utilisant Rails 4.1.0.

<%= f.select :season, options_for_seasons, :Prompt => 'Select One' %>

Ensuite, j'ai défini les options dans mon assistant.

def options_for_seasons
  ['Spring', 'Summer', 'Autumn', 'Winter']
end

J'y suis allé avec:Prompt => 'Select One'parce que je souhaitais que l'option "Select One" soit listée dans le formulaire d'édition si une saison n'avait pas été précédemment sélectionnée.

4
Paul Phillips

L'ajout de ["Select One", ""] fait que l'écran d'édition affiche toujours "Select One" plutôt que la valeur stockée. Rails 3.1 (17 août 2012)

1
user1585163

pourrait être <%= f.select :phone_type, options_for_select(["Cell", "Work", "Office", "Home", "Other"]), :Prompt => "Select One", :class => 'genForm_dropBox' %>

1
roxdurazo