我是 Ruby 1.9.3 on Rails 3.2 的新手,正在从事个人项目学习。这是一个非常基本的多项选择问答游戏,我在 Controller 和 View 中编写代码以使用户能够单击“播放”链接时遇到问题,该链接将随机显示问题和问题选择。然后,用户应该选择与四个 Question_choices 之一相对应的四个单选按钮之一。问题和 Question_choice 被添加到 user_answers 表中,然后显示下一个问题。另外,我不希望用户两次看到相同的问题。
这是我的模型:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_many :questions
has_many :question_choices
has_many :user_answers, dependent: :destroy
end
class Question < ActiveRecord::Base
attr_accessible :level, :question, :is_active
has_many :user_answers, through: :question_choices
has_many :question_choices, dependent: :destroy
end
class QuestionChoice < ActiveRecord::Base
attr_accessible :choice, :is_correct, :question_id
has_many :user_answers, dependent: :destroy
belongs_to :question
end
class UserAnswer < ActiveRecord::Base
attr_accessible :answer_time, :user_id, :question_choice_id, :question_id
belongs_to :user
belongs_to :question
belongs_to :question_choice
end
我的路线:
Trivia::Application.routes.draw do
root to: 'static_pages#home'
resources :sessions, only: [:new, :create, :destroy]
resources :questions do
resources :question_choices
end
resources :users
resources :user_answers
end
我已经能够分别使用“索引”、"new"、“编辑”和“显示”的脚手架,但我很难将它们捆绑在一起,以便用户可以看到问题并然后选择一个问题,他们的用户答案就会更新。
任何帮助将不胜感激。
谢谢。 谢恩
最佳答案
我认为你的数据模型有点复杂。我们来看看要求
我们有三个对象:用户、问题和答案 (QuestionChoices)。 我们知道一些关于这些对象之间关系的事情:
- 一个问题有多个答案
- 用户将回答多个问题
- 一个问题将由多个用户回答
- 用户只能回答一个问题一次
数字 1 是一个简单的关系,该问题具有多个问题选择:
class Question < ActiveRecord::Base
attr_accessible :level, :question, :is_active
has_many :question_choices, dependent: :destroy
end
第二点与用户模型有关,这非常简单:
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_many :user_answers, :dependent => :destroy
end
好的,现在轮到用户回答了。它的工作是将问题选择与用户联系起来:
class UserAnswer < ActiveRecord::Base
attr_accessible :answer_time, :user_id, :question_choice_id, question_id
belongs_to :user
belongs_to :question
belongs_to :question_choice
validates :question_id, uniqueness: { :scope => :user_id }
end
该验证是第 4 点的答案。它表示“如果您根据用户将所有用户答案分组在一起,则每个问题应该只出现一次。”因此,如果用户尝试回答一个问题两次,它将拒绝在数据库中创建该项目。
第三点并不是真正的要求,而是您需要确保数据模型能够控制的内容。我们没有什么可以阻止这一点。
关于ruby-on-rails - Trivia 游戏的 Controller 和 View 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17334340/