我想知道如果你可以給我一些關於如何使用has_many的建議:通過關聯在這種情況下,我花了很多時間重寫我的代碼,可能沒有無濟於事。如何使這項工作作爲has_many:通過
我有一個用戶模型,每個用戶都可以玩很多測驗(因此會生成很多測驗分數)。現在,玩家通過點擊一個用戶名,這將觸發查詢所有問答題是用戶(用戶的has_many:題)開始遊戲取得了
def startGame
user = User.find_by_name(params[:user])
questions = user.questions
end
出於顯而易見的原因,玩家可以兩次玩同樣的測驗。雖然我想出了一種防止這種方式的方法,但我並沒有採取有效的方法。有人建議我嘗試關聯表。我開始該關聯表作爲這一計劃
User.rb一個has_many :through
(該用戶是用戶,作爲玩家,而不是用戶的-測驗製造商)
has_many :scores
has_many :quizzes, :through => :scores
Quiz.rb
has_many :scores
has_many :users :through => :scores
分數
belongs_to :user
belongs_to :quiz
的問題是,目前,沒有測驗模型或任何競猜。測驗其實只是由問題(Question.rb)和答案(Answer.rb)組成。例如,每個用戶has_many :questions
像這樣
User.rb每個問題has_many :answers
has_many :questions
Question.rb
has_many :answers
所以我什麼都能做測驗模型(或任何我會打電話它)從?這發生在我
一個想法是做一個Quiz.rb模型,做
has_many :questions
這意味着Question.rb屬於兩個User.rb和Quiz.rb.
然後我可以如上所述使用用戶,測驗和分數來做has_many :through
嗎?如果是這樣,分數將同時具有user_id(對於玩家)和quiz_id(對於測驗),但是由於整個關聯的目的是防止用戶玩兩次相同的測驗,所以我想知道我該如何做到這一點使用下面的代碼。
def startGame
user = User.find_by_name(params[:user]) #this user is the quiz creator
questions = user.questions
.....
#I want to check right here if they've already played the quiz. how to do it with the has_many :through of Quiz, Score, User (as player)
end
隨着user.rb(播放器),score.rb,quiz.rb成立,我將如何檢查,如果他們已經在這種情況下發揮這個特殊的測驗。
此外,如果我做測驗模型,並做has_many:問題,我將不得不使用多態性,因爲user.rb也has_many:問題?
更新:我想檢查他們是否已經在def startGame
方法中玩過,並且不讓他們繼續遊戲,如果他們有。即我不想等到要保存分數以查看該測驗的分數是否已經保存。
謝謝,但這是否意味着你做的一切是一樣的:你可以添加到您的分數遷移:
並添加到您的分數模型。所以你會做Quiz.rb has_many:問題? User.rb has_many:問題是否重要?我必須使用多態嗎?測驗和用戶都有has_many:問題嗎?「原樣」嗎? – BrainLikeADullPencil 2013-03-15 04:51:15
你的答案似乎假設我們在再次玩牌後做了唯一性檢查(如果他們已經玩過一次,估計不會讓他們保存)。但是,我想檢查startGame方法並阻止它們再次播放。 – BrainLikeADullPencil 2013-03-15 04:54:39
@BrainLikeADullPencil:你可以檢查'quizzes'來查看測驗是否存在,如果你找到它,就會抱怨。 – 2013-03-15 19:56:25