2010-07-09 75 views
1

我使用Ruby on Rails和所述paths_of_glory gem型方法使用數據庫類型的列問題

我需要訪問類型的用戶實現,以便與每個特定成就沿顯示畫面的成就干擾。當我嘗試通過@user.achievements.type訪問它,我得到的是說,它希望返回「陣列」(如成就是數組),而不是實際返回我的數據庫的類型列中的元素的錯誤。

由於每一個Ruby對象有一個名爲type方法,我的電話訪問數據庫的類型列失敗。當我嘗試更改表格中的條目時,paths_of_glory gem表示它需要一個類型列才能正常運行。

我不太知道從哪裏何去何從才能訪問數據庫中的該列。有什麼建議麼?

+0

TY的編輯。 – jfedick 2010-07-09 21:11:08

回答

3

不能完全確定你問在這裏,但也許這將幫助。

對於第一件事,@user.achievements是一個數組,因爲您有多個成就,並且類型方法是針對@user.achievements的單個元素,這就是爲什麼那樣不行。你必須做這樣的事情:

@user.achievements.each do |achievement| 
    # Do stuff here 
end 

關於type列,類型是專門爲單表繼承,其中多個Rails模型使用單個數據庫表使用Rails中保留列。所以你不能直接訪問它。我假設paths_of_glory以某種方式使用STI。你可以用類似achievement.class的方式訪問該模型的類,然後如果你只想要它的名字,你可以試試achievement.class.to_s

@user.achievements.each do |achievement| 
    model = achievement.class # => MyAwesomeAchievementClass 
    @image = model.picture # You could write some method in the model like this 
end 
+0

+1這看起來很棒。如果你想要所有成就的類型,那麼你可以執行'@ user.achievements.map(&:type)',它將返回一個數組,其中包含用戶成就的類型或'@ user.achievements.first.type'獲取用戶的第一個成就的類型。 – 2010-07-10 09:22:20

+0

當我嘗試運行@ user.achievements.each做|成績|,它給我的錯誤: 單表繼承機制未能找到該子類。出現此錯誤的原因是「類型」列在保留繼承的情況下保留用於存儲類。如果您不打算將其用於存儲繼承類或覆蓋Achievement.inheritance_column以使用該信息的另一列,請重命名此列。 – jfedick 2010-07-20 23:58:24

+0

您是否嘗試在塊內執行任何操作,或者只是在該行上發生錯誤? – Karl 2010-07-21 00:14:59