如何在Rails控制器中多次运行一个方法

时间:2016-05-23 03:25:01

标签: ruby-on-rails ruby ruby-on-rails-3

我正在构建一个包含多个级别的游戏应用。当用户提供正确的答案时,我希望我的游戏进入下一个级别。此时,我的代码可以从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级?

1 个答案:

答案 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!

级别必须在增加后保存回数据库,或者当操作重定向时增量丢失。