新的rails不知道這裏最好的方法是什麼。我想定義一個簡單的C++樣式枚舉,然後可以在我的數據庫中用作自定義類型。枚舉可以使用數組或自定義模塊進行模擬,但是如何將其轉換爲我的表的自定義類型?Rails3:定義枚舉並將其用作數據庫列的自定義類型
回答
您是否考慮過在數據庫中使用內置的枚舉支持?許多常見的RDMBS具有枚舉支持,例如Postgres(請參閱http://www.postgresql.org/docs/9.1/static/datatype-enum.html)和MySQL(請參閱http://dev.mysql.com/doc/refman/5.5/en/enum.html)。有了這個,你可以直接在你的數據存儲中創建這個類型,然後通過一個ActiveRecord插件使用它(例如Postgres的enum_type:https://github.com/riscfuture/enum_type)。
另外,你可以像你所描述的那樣使用類似active_enum的結構來枚舉枚舉,並將字段作爲整數存儲在數據庫中。
這裏是我遵循的軌道模式:
在我的模型類,我添加了一個module
舉行列的可能值。然後我將它們放入一個數組中,並根據可能值的數組定義驗證。
想象一下,我有一個名爲status
的列/屬性,它可以是三個可能的值。我應該這樣做:
class MyModel < ActiveRecord::Base
# This validates that status can't be null
validates :status, :presence => true
# Define a module with all possible values
module Status
IN_DEVELOPMENT = 'in development'
DISABLED = 'disabled'
ACTIVE = 'active'
end
# Now create an array of possible status values, and add a validation
STATUSES = [ Status::DISABLED, Status::ACTIVE, Status::IN_DEVELOPMENT]
validates :status, :inclusion => { :in => STATUSES, :message => "%{value} is not a valid status value" }
end
感謝Kevin,我之前嘗試過類似的方式,但是遷移不能將數組定義識別爲自定義類型。我收到一個錯誤說#無法轉儲表「hostprofiles」,因爲以下標準錯誤 #未知類型'服務'列'服務' – Helen
一般來說,我發現最好暫停過去的做法,並嘗試'走鋼軌方式'在這種情況下。不可避免的是,事情變得更快,更順暢。爲什麼自定義類型如此重要?你可以使用鐵軌附帶的類型嗎? –
@KevinBedell你能解釋一下這個模塊的用途還是需要的,而不僅僅是給出一組數值?我只是好奇。 –
取決於你打算如何使用您的代碼中該枚舉類型我發現,使用範圍實現接近同樣的事情在數據庫中的枚舉類型一起,以確保只有具體值被設置。
例子:
scope :trial, :conditions => { :utype => 'TRIAL' }
scope :registered, :conditions => { :utype => 'REGISTERED' }
scope :active, :conditions => { :status => 'ACTIVE' }
scope :abuse, :conditions => { :status => 'ABUSE' }
- 1. 自定義枚舉類型
- 2. Ç枚舉(枚舉類型定義)的
- 3. ASP.NET MVC - 使用枚舉的自定義數據類型
- 4. 自定義枚舉 - 未知類型
- 5. 自定義枚舉基礎類型
- 6. 如何使用doctrine和symfony2自定義枚舉數據類型將枚舉值保存到數據庫?
- 7. 使用ORMLite保存PostgreSQL自定義枚舉數據類型
- 8. Java將類定義爲枚舉值而不是其他類型
- 9. CLR用戶定義類型枚舉
- 10. 的類型定義枚舉變量
- 11. Java自定義枚舉值枚舉
- 12. 具有自定義枚舉的C++類
- 13. Json.NET帶有數據註釋的枚舉類型的自定義序列化
- 14. Java自定義枚舉
- 15. 自定義BatchStatus枚舉
- 16. .NET枚舉類型有多個定義
- 17. 定義在C++枚舉類型
- 18. 定義自定義數據類型
- 19. 使用自定義類型實現枚舉類似功能
- 20. 如果枚舉類型具有不同的自定義屬性,則需要自定義枚舉屬性
- 21. Java:Java5枚舉自定義序列化
- 22. 覆蓋在繼承類的自定義枚舉枚舉
- 23. 自定義數據類型?
- 24. 自定義數據類型
- 25. 將自定義類型映射到數據庫列
- 26. 混淆關於枚舉數據類型定義?
- 27. For Each枚舉自定義數據集類
- 28. 用戶自定義數據類型VS用戶自定義類型VS用戶定義的表類型
- 29. Python 3中的自定義枚舉類型
- 30. 在映射文件中定義枚舉類型,或從另一個表中定義枚舉類型
我居然不知道。感謝您的鏈接,我會研究它。 – Helen