簡體   English   中英

如何在Rails 4模型中存儲符號?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM