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