我正在制作一个使用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();
命令中指定一个实例吗?或者我是否需要创建多个测验控制器(如历史与体育),然后在用户生成测验时单独调用它们?
答案 0 :(得分:0)
创建多个控制器不会是DRY(“不要重复自己”)。由于您打算让用户选择体育或历史等类别,您可以从params
中提取此类别并在控制器中使用它。如果您希望将seleteced类别用于多个后续请求(不允许用户每次都重新选择它),您可以存储它,例如在一个cookie中 - 这是完成的
session[:category] = params[:category]