如何通過具有多個狀態的rails遷移添加列?我知道布爾值可以有兩種狀態。但是如果我想要兩個以上的州呢?添加具有多個狀態的列
如果我想要列有4個狀態,我應該在下面的命令中包含什麼?這4個國家將被稱爲「大」,「中」,「小」,「extra_small」 ......
rails generate migration add_column_to_users
如何通過具有多個狀態的rails遷移添加列?我知道布爾值可以有兩種狀態。但是如果我想要兩個以上的州呢?添加具有多個狀態的列
如果我想要列有4個狀態,我應該在下面的命令中包含什麼?這4個國家將被稱爲「大」,「中」,「小」,「extra_small」 ......
rails generate migration add_column_to_users
如果您需要存儲一組特定的值,您可能會對普查員感興趣。
枚舉在滑軌
第一個解決方案是用ActiveRecord::Enum
(見doc)
實施例:
class Conversation < ActiveRecord::Base
enum status: [ :active, :archived ]
end
這種解決方案的缺點是,你實際存儲的int
或string
鍵入數據庫,所以約束沒有真正實施。
數據庫枚舉
第二種可能性是使用原生枚舉類型,如果您的RDBMS支持它。
例子:
CREATE TABLE shirts (
name VARCHAR(40),
size ENUM('x-small', 'small', 'medium', 'large', 'x-large')
);
通過這一解決方案,雖然,約束是強制執行的,但如果你需要在你設定一個新的值,你需要一個數據庫遷移。
之證件:
除非你有使用簡單VARCHAR
(:string
型)柱引人注目的性能問題通常是罰款。
將您的有效狀態存儲在數組中,您可以在模型上設置驗證以確保提供的狀態是正確的。