【发布时间】:2014-10-25 03:54:26
【问题描述】:
这是我第一次使用带有 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
但这似乎没有做任何事情,我该如何解决这个问题?有没有人有过类似的经历?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 enums