在我的Rails方法中使用if / elsif:始终忽略条件

时间:2016-04-13 06:58:08

标签: ruby-on-rails ruby

我正在尝试编写一个执行两项操作的方法:

1)检查排名表,其中包含user_id(整数),game_id(整数)和竞争对手的Ranking(整数) ,和

2)使用该排名,在记录StackChips时更新另一个名为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. ^

我哪里错了?

3 个答案:

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