我正在构建一个包含多个级别的游戏应用。当用户提供正确的答案时,我希望我的游戏进入下一个级别。此时,我的代码可以从1级移动到2级,但是一旦处于2级,它就不能超过3级。即使提供了正确的答案,游戏也不会超过2级。 / p>
这是我的控制器代码:
HtmlNode nthTdNode = root.SelectSingleNode("//table[1]/tr[last()]/td[" + 6 + "]");
我尝试在我的play方法中使用class Game1Controller < ApplicationController
def play
@game1 = Game1lv.find(params[:level])
@game1l = Game1lv.where(:level => @game1).limit(1).pluck(:imagelink)
@game1a = Game1lv.where(:level => @game1).limit(1).pluck(:answer)
@game1link = @game1l[0].to_s
@game1answer = @game1a[0].to_s
@game1answer_user = params["answer"]
if @game1answer_user == @game1answer
redirect_to game1_play_path(@game1.level += 1), :flash => { :success => "You are right! Now try the next question" }
end
end
end
循环,但是Rails提示错误:
在此操作中多次调用渲染和/或重定向。
我做错了什么,我怎样才能让我的用户能够超越2级?
答案 0 :(得分:2)
尝试这样的事情:
def play
@game1 = Game1lv.find(params[:level])
@game1link = @game1.imageLink
@game1answer = @game1.answer
@game1answer_user = params["answer"]
if @game1answer_user == @game1answer
@game1.update({ level: @game2.level + 1 })
redirect_to game1_play_path(@game1.level), :flash => { :success => "You are right! Now try the next question" }
end
end
已经做了一些改进。代码现在不是为每个字段单独查询数据库,而是从原始查询中提取这些字段。这是标准的ActiveRecord功能。
此外,行@game1.update
用于递增级别并将新级别保存到数据库。这是此代码的简洁和首选版本:
@game1.level += 1
@game1.save!
级别必须在增加后保存回数据库,或者当操作重定向时增量丢失。