2016-07-14 23 views
0

我可能找不到任何關於此的內容,因爲我不知道如何描述它。在Rails中將玩家統計數據(每個遊戲的不同)保存到數據庫中

我有以下設置:

  • 用戶帳號可以有基本信息(姓名,年齡),可選的配置文件,有也可以沒有相關帳戶的配置文件。
  • 一個配置文件可以鏈接到幾個遊戲配置文件(每個遊戲一個)
  • 遊戲配置文件有一個遊戲名稱,應該是我可以在其中找到玩家的統計信息的地方。

現在,對於不同的遊戲,有不同的統計數據。我是否真的需要爲每個遊戲創建具有相關屬性的另一個模型,還是有更智能的方法來實現這一點?

回答

2

@Okomikeruko使得有關不同屬性描述的不同遊戲狀態好點。您應該被警告,但hash in string方法會使查詢和索引表變得複雜。

替代方案是具有保持遊戲的統計信息,其中一個是header表,攜帶屬性,諸如遊戲會話的日期,持續時間等以及detail表,保持遊戲特定的屬性兩個表:

# pseudocode: 

GameProfile 
    has_many :game_profile_details 
end 

GameProfileDetail 
    belongs_to :game_profile 

    stat_name: string 
    stat_value: string 
end 
+0

我認爲我更喜歡你的實現,因爲它更像「Rails-like」。我應該明確指出,我認爲遊戲就像電子遊戲一樣,或者與運動同義。所以我會將GameStats添加到每個遊戲中,然後從GameProfileDetail中引用GameStat - 但這絕對是指向正確的方向,非常感謝! – TemporaryName

1

您可以創建一個通用模型來存儲給定遊戲的統計信息。

由於每場比賽都會有一些相同的數據(名字?,高分?),您可以輕鬆設置這些數據。

棘手的部分將是如何處理不同的遊戲統計。一場比賽可能有一個「最佳時間」,而另一場比賽「變成習慣」。

要處理這個問題,您可以將其他數據保存爲一個字符串中的散列。

因此,它會在一場比賽中節省meta_data: "{'best_time' => '0:04:23.6', 'other' => 'thing'}",但對於不使用比賽的場地,您不需要留下空的best_time場地。

然後,當你加載數據的基礎上,遊戲中,你可以編寫

<%= @gamedata.meta_data.best_time %> 
# returns "0:04:23.6" 
+0

好的解決方案,但我會使用Nic Nicolo's的修改版本。不過謝謝! – TemporaryName

+0

同意。我在另一個項目中做了類似@ Nic_Nilov的解決方案。我根據我最近的使用Stripe API的經驗推薦我的建議。 – Okomikeruko

相關問題