Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 有条件地引用实例变量Ruby/Rails_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 有条件地引用实例变量Ruby/Rails

Ruby on rails 有条件地引用实例变量Ruby/Rails,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,这是我关于stackoverflow的第一个问题。 我试着搜索类似的,但到目前为止什么也没找到。 另外,作为Ruby/Rails开发人员,我有点新手,所以我可能完全没有基本概念 但让我们开门见山。 我的应用程序基本上是一个游戏。在游戏结束时,作为Desive登录用户的玩家将显示他获得的分数。 当玩家点击“排名”按钮时,该分数通过JavaScript发送到服务器,作为“排名”页面URL中的查询字符串,其中显示排名前5名。随着分数一起发送的是刚刚结束的游戏的难度,因此排名将参考该难度级别 因此,我们

这是我关于stackoverflow的第一个问题。 我试着搜索类似的,但到目前为止什么也没找到。 另外,作为Ruby/Rails开发人员,我有点新手,所以我可能完全没有基本概念

但让我们开门见山。
我的应用程序基本上是一个游戏。在游戏结束时,作为Desive登录用户的玩家将显示他获得的分数。
当玩家点击“排名”按钮时,该分数通过JavaScript发送到服务器,作为“排名”页面URL中的查询字符串,其中显示排名前5名。随着分数一起发送的是刚刚结束的游戏的难度,因此排名将参考该难度级别

因此,我们需要调用Pages控制器的“排名”操作。我想做的是更新用户的“max_score”,即检查当前分数是否大于“max_score”属性,并随后更新该属性。由于我们有这三个不同的难度等级,用户实际上拥有与最高分数相关的三个属性:max\u easy、max\u medium、max\u hard

因此,我首先需要检查必须考虑三个属性中的哪一个,然后评估“大于”条件。
我决定在用户模型中定义一个方法,该方法由Pages#ranking调用。代码如下:

def update_max_score(diff,score)

  @ref_score = self.max_easy if diff == "easy"
  @ref_score = self.max_medium if diff == "medium"
  @ref_score = self.max_hard if diff == "hard"

  if score.to_i > @ref_score
    @ref_score= score.to_i
  end
end
但实际的实例属性没有更新,甚至从控制台调用该方法。 到目前为止,我发现让这个方法起作用的唯一方法是显式地使用self.max_easy或self.max_medium,这本身并不邪恶,但肯定意味着将指令复制三倍

另外,我想知道,作为将来的参考,这个任务有什么问题:我就是搞不懂


提前感谢。

您希望更新数据库中的列,因此应使用ORM:


这同样适用于OP,但是
self
是多余的。我们得到了下面的想法和语法,但是ref_score属性不存在。尝试执行ref_score=“max_35;{diff}”,但它仍然表示ref_score不是属性。不,DB中没有ref_score列。我想做的是输入我想更新的DB列的名称,然后更新它。我曾想过在页面中排名:
current\u user.update\u max\u score(params[:diff],params[:score])current\u user.save
因此,update\u max\u score方法实际上没有必要保存到DB。。。但这样就不再需要显式调用
save在控制器中!顺便说一句,我找到了一种方法让它工作:
update_attributes(:“max#{diff}”=>[send(“max#{diff}”)、score.to#I].max
,如果安全的话,这很好。
def update_max_score(diff, score)
  update_attributes "max_#{diff}" => [send("max_#{diff}"), score.to_i].max
end