При вызове метода в моей модели я хотел бы обновить поле с именем «Запущено». Это кажется простым, но:
Это перерывы:
has_many :terra_players, :dependent => :destroy
serialize :territory_owners
class SomeGame < ActiveRecord::Base
def startGame
self.territory_owners = []
self.terra_players.each do |i|
i.update_attributes(:my_turn => true, :army_pool => 35)
end
#give each player maxterritory number of territories
max_territories = 42 / self.terra_players.length
spare_territories = 42 % self.terra_players.length
for i in (0..42-spare_territories-1) #bleh
# pick a random player, make sure they still need territories
player = nil
while (true) do
player = self.terra_players.sample
if player.num_territories < max_territories
break
end
end
self.territory_owners.push([player, 1]) #hash instead maybe?
# make sure player gets updated too
player.num_territories += 1
player.save
end
if spare_territories != 0
j = 0
for k in (i+1..42-1)
player = self.terra_players[j]
j += 1
self.territory_owners.push([player, 1]) #hash instead maybe?
player.num_territories += 1
player.save
end
end
self.update_attribute(:started, true)
self.save
end
Я получаю:
ArgumentError в TerraPlayersController # create
неверное количество аргументов (2 для 0)
На линии self.update_attribute(:started, true)
.
Но, похоже, это работает:
class SomeGame < ActiveRecord::Base
def startGame
...
myself = TerraGame.find(self.id)
myself.update_attribute(:started, true)
myself.save
end
Почему работает второй, а не первый? Есть ли лучший способ, которым я должен делать это?