2
我使用一个模型枚举使用枚举:导轨 - 在。凡查询
enum status: [:pending, :approved]
我在模型中的唯一性验证,看起来像这样:
validates :item_id, uniqueness: { scope: :user_id, conditions: -> { where(status: :approved) }, message: "You already have this item." }
这不起作用。如果我将:approved
更改为1
,它才会起作用。我很困惑,为什么我不能在这里使用状态名称,当我可以做一些像Item.first.update_attributes(status: :approved)
,它工作正常。
所以,只是为了澄清我什么时候可以而且不能只使用符号?使用符号设置属性似乎工作得很好。 – user4584963
当您使用enum rails内部使用枚举的名称创建getter和setter方法并且getter将始终返回相应整数值的字符串键时,当您调用setter并传递符号时,rails将查找整数值并设置它,这是什么被持久化在数据库(整数),所以当你查询activerecord时,会尝试过滤一个字符串的数据库中的整数列,当然不会工作。因此,长话短说,用enum复数散列返回的值进行查询,如果您愿意,可以使用符号进行赋值。 –
刚刚查看了文档,似乎当前不稳定版本的rails允许在查询中使用符号:http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html –