我正在尝试编写一个执行两项操作的方法:
1)检查排名表,其中包含user_id
(整数),game_id
(整数)和竞争对手的Ranking
(整数) ,和
2)使用该排名,在记录Stack
和Chips
时更新另一个名为game_id
的表,其中user_id
为 def self.update_wallet(game_id)
records = Ranking.where(game_id: game_id)
records.each do |record|
puts record.inspect
puts record['user_id']
if record.ranking = 1
Stack.create(user_id: record['user_id'], game_id: game_id, chips: 50)
elsif record.ranking = 2
Stack.create(user_id: record['user_id'], game_id: game_id, chips: 30)
else
Stack.create(user_id: record['user_id'], game_id: game_id, chips: 10)
end
end
end
。
为了测试这个,我正在创建一个记录变量,然后使用if / else在用户排名第一(“1”)时给出一定数量的筹码。
ExampleModel.rb
Chips
在控制台中,输出是它确实为Stack表中的所有三个Rankings创建记录,但它将Rankings
记录为“50”(匹配第一个条件),即使有三个不同的排名在数组中。
对于我的测试,我使用<ActiveRecord::Relation [#<Ranking id: 153, game_id: 1, user_id: 1, ranking: 1, game_time: nil>, #<Ranking id: 154, game_id: 1, user_id: 2, ranking: 2, game_time: nil>, #<Ranking id: 155, game_id: 1, user_id: 3, ranking: 3, game_time: nil>
表中的以下数据。
Example.update_wallet(1)
尽管如此,在控制台中运行<Stack id: 75, game_id: 1, user_id: 1, chips: 50>, #<Stack id: 76, game_id: 1, user_id: 2, chips: 50>, #<Stack id: 77, game_id: 1, user_id: 3, chips: 50>, #<Stack id: 78, game_id: 1, user_id: 1, chips: 50>, #<Stack id: 79, game_id: 1, user_id: 2, chips: 50>, #<Stack id: 80, game_id: 1, user_id: 3, chips: 50>
后,它创建了三条与条件1匹配的记录:
$("#demo").load(location.href + " #demo"); // Add space between URL and selector.
^
我哪里错了?
答案 0 :(得分:2)
在赋值运算符==
中使用比较运算符=
:
if record.ranking == 1
Stack.create(user_id: record['user_id'], game_id: game_id, chips: 50)
elsif record.ranking == 2
Stack.create(user_id: record['user_id'], game_id: game_id, chips: 30)
else
Stack.create(user_id: record['user_id'], game_id: game_id, chips: 10)
end
修改强>
添加@CarySwoveland评论以回答。
您可以使用if/else/end
来避免hash
语句。
h = Hash.new(10) #default value of hash is 10 i.e h['xyz'] returns 10
h.merge!(1 => 50, 2 => 30)
Stack.create(user_id: record['user_id'], game_id: game_id, chips: h[record.ranking])
答案 1 :(得分:1)
record.ranking = 1
是一项任务,而不是比较。
要将record.ranking
与1进行比较,您应该使用==
:
record.ranking == 1
答案 2 :(得分:1)
您正在对您的记录排名进行分配,但您的意图是比较if语句中的排名。
更改
if record.ranking = 1
到
if record.ranking == 1
和
elsif record.ranking = 2
到
elsif record.ranking == 2