在我的模型中調用方法時,我想更新一個名爲「started」的字段。這看起來非常簡單,但是:爲什麼我不能在Rails 3.0.7中調用self.save?
這打破:
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
我得到:在TerraPlayersController#
引發ArgumentError創建
錯誤的參數數目(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
爲什麼第二個工作,但不是第一?有更好的方法我應該這樣做嗎?
哎,這東西其實我知道,但忘了。感謝您指出了這一點! – Eris
感謝您的提示,但錯誤依然存在。我添加了「startGame」的完整代碼,我想知道序列化的territory_owners是否是真正的問題。 –
您是否嘗試用'self.started = true'替換'update_attribute(:started,true)'?你確定你仍然得到相同的錯誤,因爲那很奇怪。 –