![](/img/trans.png)
[英]How can I use devise with rails 4 to store data on a second model?
[英]How can I store a symbol in a Rails 4 model?
我經常需要存儲一個常量。 符號對於定義常量類型非常有效,但是我不知道如何在Rails模型中定義它們。 我將創建一個單獨的模型來存儲類型。 例如,我有一個具有status
屬性的Game
模型。
class Game < ActiveRecord::Base
has_one :status
end
status
屬性是與另一個稱為Status
模型的關聯。 status
表有四行,每行定義一個不同的status
,每個status
都有一個字符串的name屬性。
def change
create_table :statuses do |t|
t.belongs_to :game
t.timestamps
end
end
但這感覺效率低下並且是錯誤的。 理想情況下,我可以在Game
表中有一個存儲符號/常量的列。 那可能嗎?
您的游戲狀態可以視為枚舉類型。 我非常喜歡將這些作為記錄存儲在單獨的數據庫表中。 它使它們易於重命名和遷移,同時保持數據完整性。
您可能還想嘗試一下Rails 4.1新增的“枚舉”功能。 您可以簡單地聲明如下內容
class Game
enum :status => %w[Init Pause Play End]
end
請注意,您需要添加一個整數類型的“狀態”列以支持此操作。
有關更多信息,請嘗試閱讀http://robots.thoughtbot.com/whats-new-in-edge-rails-active-record-enum http://richonrails.com/articles/active-record-enums-in-ruby-on -軌道-4-1
我將創建一組常量來表示可能狀態的范圍。 這些將作為整數存儲在數據庫中。 可以在代碼中將這些int與Game :: Over進行比較。
class Game
NotStarted = 0
InPlay = 1
Over = 2
...
end
puts "let's get started!" if Game.find(id).status == Game::NotStarted
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.