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 –