我正在尝试使用新的枚举类型,除了一个问题之外,一切正常。在编写功能测试时我通常使用结构:
order = Order.new(o_status: :one)
post :create, order: order.attributes
# Error message:
# ArgumentError: '0' is not a valid o_status
只要我没有 Enum 属性就可以了。枚举的问题在于 .attributes
返回的是整数值,而不是字符串值,该整数值无法作为枚举属性值发布。
在上面的示例中,模型可以如下所示:
class Order < ActiveRecord::Base
enum o_status: [:one, :two]
end
当我这样做时我发现:
order = Order.new(o_status: :one)
atts = order.attributes
atts[:o_status] = "one" # it must be string "one" not symbol or integer 0
post :create, order: order.attributes
它会正常工作。
这是正常现象还是有更好的解决方案?
编辑:
我发现的唯一解决方法如下所示:
order = { o_status: :one.to_s }
post :create, order: order
- 优点:简短、整洁
- 缺点:在通过邮件发送之前,我无法使用
order.valid?
验证订单
当内部有 Enum 时,这并不能解决 order.attributes
的问题。
最佳答案
You can set the default value from the database declaration, like:
create_table :conversations do |t|
t.column :status, :integer, default: 0
end
Good practice is to let the first declared status be the default.
最好遵循该建议,并避免在创建过程中为枚举设置值。为列设置默认值也可以在测试中发挥作用。
关于ruby-on-rails - Ruby on Rails 4.2 枚举属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29445359/