Проверка перечисления в Rails 4
Это первый раз, когда я использую перечисления с rails 4, и я столкнулся с некоторыми проблемами, подумал о нескольких грязных решениях и хотел проверить, есть ли более элегантные решения:
Это моя часть, относящаяся к миграции таблицы:
create_table :shippings do |t|
t.column :status, :integer, default: 0
end
Моя модель:
class Shipping < ActiveRecord::Base
enum status: { initial_status: 0, frozen: 1, processed: 2 }
end
И у меня есть этот бит на мой взгляд (используя простую форму для):
= f.input :status, :as => :select, :collection => Shipping.statuses, :required => true, :prompt => 'Please select', label: false
Итак, в моем контроллере:
def create
@shipping = Shipping.create!(shipping_params)
if @shipping.new_record?
return render 'new'
end
flash[:success] = 'Shipping saved successfully'
redirect_to home_path
end
private
def shipping_params
params.require(:shipping).permit(... :status)
end
Поэтому, когда я отправляю форму создания и огонь действия создания, я получаю эту ошибку проверки:
'1' is not a valid status
Поэтому я подумал, что знаю, что проблема связана с типом данных, поэтому я добавил этот бит в модель:
before_validation :set_status_type
def set_status_type
self.status = status.to_i
end
Но, похоже, это ничего не делает, как мне решить это? У кого-нибудь был подобный опыт?