我可能找不到任何關於此的內容,因爲我不知道如何描述它。在Rails中將玩家統計數據(每個遊戲的不同)保存到數據庫中
我有以下設置:
- 用戶帳號可以有基本信息(姓名,年齡),可選的配置文件,有也可以沒有相關帳戶的配置文件。
- 一個配置文件可以鏈接到幾個遊戲配置文件(每個遊戲一個)
- 遊戲配置文件有一個遊戲名稱,應該是我可以在其中找到玩家的統計信息的地方。
現在,對於不同的遊戲,有不同的統計數據。我是否真的需要爲每個遊戲創建具有相關屬性的另一個模型,還是有更智能的方法來實現這一點?
我可能找不到任何關於此的內容,因爲我不知道如何描述它。在Rails中將玩家統計數據(每個遊戲的不同)保存到數據庫中
我有以下設置:
現在,對於不同的遊戲,有不同的統計數據。我是否真的需要爲每個遊戲創建具有相關屬性的另一個模型,還是有更智能的方法來實現這一點?
@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
您可以創建一個通用模型來存儲給定遊戲的統計信息。
由於每場比賽都會有一些相同的數據(名字?,高分?),您可以輕鬆設置這些數據。
棘手的部分將是如何處理不同的遊戲統計。一場比賽可能有一個「最佳時間」,而另一場比賽「變成習慣」。
要處理這個問題,您可以將其他數據保存爲一個字符串中的散列。
因此,它會在一場比賽中節省meta_data: "{'best_time' => '0:04:23.6', 'other' => 'thing'}"
,但對於不使用比賽的場地,您不需要留下空的best_time
場地。
然後,當你加載數據的基礎上,遊戲中,你可以編寫
<%= @gamedata.meta_data.best_time %>
# returns "0:04:23.6"
好的解決方案,但我會使用Nic Nicolo's的修改版本。不過謝謝! – TemporaryName
同意。我在另一個項目中做了類似@ Nic_Nilov的解決方案。我根據我最近的使用Stripe API的經驗推薦我的建議。 – Okomikeruko
我認爲我更喜歡你的實現,因爲它更像「Rails-like」。我應該明確指出,我認爲遊戲就像電子遊戲一樣,或者與運動同義。所以我會將GameStats添加到每個遊戲中,然後從GameProfileDetail中引用GameStat - 但這絕對是指向正確的方向,非常感謝! – TemporaryName