RoR – Seleccionar etiqueta con include_blank deshabilitado

Quiero un resultado como este:

 Choose a car Volvo Saab Mercedes Audi  

Con el siguiente código solo puedo terminar con:

  'Choose a car', :disabled => 'Choose a car'}) %> 

=>

  Choose a car Volvo Saab Mercedes Audi  

La primera opción no está deshabilitada …

Creo que lo que buscas es lo siguiente:

 <%= f.select(:car, xxxxxx, {:include_blank => 'Choose a car', :disabled => 1}) %> 

La respuesta de Ito A no funcionará en Rails 4.2 (No estoy seguro acerca de versiones anteriores). De la documentación …

: deshabilitado: puede ser un solo valor o una matriz de valores que serán opciones deshabilitadas en la salida final.

Por lo tanto, a la opción :disabled se le debe dar un valor que coincida con el valor de una de las opciones en la colección. Entonces :disabled => 'volvo' deshabilitaría la opción con value='volvo' . Sin embargo, no coincidirá con la opción include_blank, porque esa opción no es parte de la colección que se pasa al método de selección.

Rails select helper no admite directamente el comportamiento deseado. Sin embargo, puede solucionarlo agregando una opción en blanco a la colección de la siguiente manera.

Cree la colección y luego agregue una opción en blanco.

 car_names = %w(volvo saab mercedes audi) car_names_with_blank = car_names.map{|c| [c, c]}.prepend(['Choose a car', nil]) 

En la vista:

 <%= f.select(:name, car_names_with_blank, {disabled: '', selected: ''}) %> 

Aquí hay un enlace a un repository de Github con un ejemplo de trabajo. El ejemplo también muestra que la respuesta de Ito A y otras respuestas a preguntas similares de SO no funcionarán.

ACTUALIZADO: He actualizado mi respuesta con una solución e información adicional.

Una aplicación de la solución mencionada anteriormente sigue.

crear la función de ayuda de la aplicación

 def build_selections(prompt: "Select One", selections: {}) selections.reverse!.push([prompt, nil]).reverse! end 

entonces úsalo en tu vista:

 <%= f.select :category_id, build_selections(prompt: 'Select Category', selections: @category.collect{|x| [x.name, x.id]}), disabled: '' %>