从方法中指定实例变量

时间:2016-01-14 06:22:59

标签: ruby-on-rails

我正在制作一个使用Rails提供多个琐事游戏的项目。有一个问题和答案表,所有这些都被归类为一种类别的测验类型(为了指定问题类型,如“体育”与“历史”)。

要命令问题/答案组合,我调用trivia.html.erb文件:

<script type="text/javascript">
  $(function() {
     new Questions().init();
     })
 </script>

所以我们称之为问题模型,但我只想一次向用户显示一类问题。当我加载体育游戏时,我想在问题表中显示“体育”类别的问题。同样,我想在用户选择历史时显示“历史”问题。我不想同时显示多个类别。

在我的quiz_controller.rb中,我知道我可以使用实例变量指定一个类别,如下所示:

 module API
 class QuizController < ::ApplicationController
    def start


  @participation = current_user.participations.create(category: 'history')
end

def show_question
  if current_question.nil?
    participation.update finished: true
    render json: { finished: true }
  end
end

def validate_answer
  result = current_question.correcta == params[:answer].to_i

  participation.increment! :current_question_index
  participation.increment! :score if result

  render json: { result: result }
end

def skip_question
  participation.increment! :current_question_index
  render json: {}
end

private

def participation
  @participation = current_user.participations.where(
    finished: false,
    id: params[:participation_id]
  ).first
end

def current_question
  @current_question = History
    .where(category: participation.category)
    .order(id: :asc)[participation.current_question_index]
    end
  end
 end

因此,这只会显示具有匹配“历史”类别的问题。但是因为我想从同一个控制器运行多个测验,如果我为:

添加了第二个实例变量怎么办?
 @participation = current_user.participations.create(category: 'history')
 @participation = current_user.participations.create(category: 'sports')

使用两个实例变量(或更多,假设我有五个测验类别),我可以在html.erb文件中的new Questions().init();命令中指定一个实例吗?或者我是否需要创建多个测验控制器(如历史与体育),然后在用户生成测验时单独调用它们?

1 个答案:

答案 0 :(得分:0)

创建多个控制器不会是DRY(“不要重复自己”)。由于您打算让用户选择体育或历史等类别,您可以从params中提取此类别并在控制器中使用它。如果您希望将seleteced类别用于多个后续请求(不允许用户每次都重新选择它),您可以存储它,例如在一个cookie中 - 这是完成的 session[:category] = params[:category]