2011-03-09 104 views
1

我在我的Rails應用程序的模型類叫做:UserAction 在這個模型中我有一個恆定的(這是我作爲一個枚舉使用):未初始化的常量

class UserAction < ActiveRecord::Base 
end 

class UserActionType 
    ACTION1 = "action1" 
    ACTION2 = "action2" 
end 

,當我嘗試使用恆:

if some_action == UserActionType::ACTION1 
在應用程序控制器我收到以下錯誤

NameError (uninitialized constant ApplicationController::UserActionType) 

有什麼想法?

回答

1

要獲取UserActionType類,實際上您需要要求寫入它的文件。對於模型或配置了自動加載的地方,Rails通過自動加載文件使其更容易。例如,如果遇到UserAction,Rails會在模型中或您自動配置自動加載並自動需要該文件的任何位置查找名爲user_action.rb的文件。因此,您可以在app/models中創建一個名爲user_action_type.rb的新文件,並在其中粘貼UserActionType類。然後,這個錯誤不會發生。

+0

但是如果我要添加app/models/user_action_type.rb然後生病必須在數據庫中爲它創建一個表,並且我只使用該類作爲枚舉替換... – Ran

+2

只需聲明該類而不繼承ActiveRecord ::基礎。您只需要ActiveRecord模型的數據庫表。 – Teoulas

+0

@ran ...如果你沒有擴展'ActiveRecord :: Base',你不必爲它創建一個表。 – rubyprince