Я использую перечисления в Rails 4.1, чтобы отслеживать цвета вина.
Wine.rb
class Wine < ActiveRecord::Base
enum color: [:red, :white, :sparkling]
end
На мой взгляд, я создаю выбор, чтобы пользователь мог выбрать вино определенного цвета.
f.input :color, :as => :select, :collection => Wine.colors
Это генерирует следующий HTML:
<select id="wine_color" name="wine[color]">
<option value=""></option>
<option value="0">red</option>
<option value="1">white</option>
<option value="2">sparkling</option>
</select>
Однако при отправке формы я получаю сообщение об ошибке аргумента '1' is not a valid color
. Я понимаю, что это потому, что color
надо равняться, 1
а нет "1"
.
Есть ли способ заставить Rails интерпретировать цвет как целое число, а не строку?
f.select :color, Wine.colors.to_a.map { |w| [w[0].humanize, w[0]] }
потому чтоw
представляет собой массив. Не знаю почему, но, возможно, это кому-то поможет.