2

我是 Rails 3.2 上的 Ruby 1.9.3 的新手,并且正在从事个人项目来学习。这是一个非常基本的多项选择琐事游戏,我在控制器和视图中编写代码以使用户能够单击将随机显示问题和 question_choices 的“播放”链接时遇到问题。然后,用户应选择对应于四个 question_choice 之一的四个单选按钮之一。问题和 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

我已经能够将脚手架分别用于“索引”、“新”、“编辑”和“显示”,但我很难将它们捆绑在一起,以便用户可以看到问题和问题选择然后选择一个,他们的 UserAnswers 就会更新。

任何帮助将不胜感激。

谢谢你。谢恩

4

1 回答 1

2

我认为您的数据模型有点复杂。我们来看看要求

我们有三个对象:用户、问题和答案(QuestionChoices)。我们对这些对象之间的关系有一些了解:

  1. 一个问题有多个答案
  2. 用户将要回答多个问题
  3. 一个问题将由多个用户回答
  4. 用户应该只回答一次问题

数字 1 是一个具有许多问题选择的问题的简单关系:

class Question < ActiveRecord::Base
  attr_accessible :level, :question, :is_active
  has_many :question_choices, dependent: :destroy
end

第 2 点与用户模型有关,这很简单:

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation

  has_many :user_answers, :dependent => :destroy
end

好的,现在是 UserAnswers。它的工作是将问题选择与用户联系起来:

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 点的答案。它说“如果您根据用户将所有用户答案分组在一起,则每个问题应该只出现一次。” 因此,如果用户尝试两次回答问题,它将拒绝在数据库中创建此项目。

第三个并不是真正的要求,但您需要确保您的数据模型可以控制。我们没有任何东西可以阻止这一点。

于 2013-06-27T23:55:22.450 回答