Ruby 为什么可以';我不能在Rails 3.0.7中调用self.save吗?
在我的模型中调用方法时,我想更新一个名为“started”的字段。这似乎很简单,但: 这打破了:Ruby 为什么可以';我不能在Rails 3.0.7中调用self.save吗?,ruby,ruby-on-rails-3,activerecord,Ruby,Ruby On Rails 3,Activerecord,在我的模型中调用方法时,我想更新一个名为“started”的字段。这似乎很简单,但: 这打破了: has_many :terra_players, :dependent => :destroy serialize :territory_owners class SomeGame < ActiveRecord::Base def startGame self.territory_owners = [] self.terra_players.
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
为什么第二个有效而第一个无效?有更好的方法吗?该函数将更新保存到数据库(无需验证),因此调用update\u属性和save
的方法没有多大意义
但是我还是不明白你为什么会犯这样的错误。你能试试这个吗
def start
self.started = true
self.save
end
该函数将更新保存到数据库(无需验证),因此按您的方式调用update\u属性
和save
没有多大意义
但是我还是不明白你为什么会犯这样的错误。你能试试这个吗
def start
self.started = true
self.save
end
我要把我对你说过的话贴在这里
22:55重新找到对象并保存它的事实对我来说似乎意味着错误来自您在startGame方法中对对象所做的操作
22:55在Ruby中,我自己实际上不是同一个对象;它是根据相同数据初始化的新实例
22:55但它没有您在方法中所做的任何更改,因为它们没有保存
22:55所以我真的知道为什么会这样
所以,我们知道的很多。我想,你需要透露更多的StartName方法来确定真正的问题。我只想把我对你说过的话粘贴到这里
22:55重新找到对象并保存它的事实对我来说似乎意味着错误来自您在startGame方法中对对象所做的操作
22:55在Ruby中,我自己实际上不是同一个对象;它是根据相同数据初始化的新实例
22:55但它没有您在方法中所做的任何更改,因为它们没有保存
22:55所以我真的知道为什么会这样
所以,我们知道的很多。我认为,你需要透露更多的StartName方法来确定真正的问题。我已经解决了这个问题。我的序列化属性需要在保存/使用期间进行编码和解码
正因为如此,self
的保存工作搞砸了
正如Eris所说,第二种方法之所以有效,是因为我没有将错误的更改保存到self
我已经解决了这个问题。我的序列化属性需要在保存/使用期间进行编码和解码
正因为如此,self
的保存工作搞砸了
正如Eris所说,第二种方法之所以有效,是因为我没有将错误的更改保存到self
呃,这是我实际上知道但忘记的事情。谢谢你指出这一点!谢谢你的提示,尽管错误仍然存在。我为startGame
添加了完整的代码,我想知道序列化的territory\u所有者是否是真正的问题。您是否尝试将update\u属性(:start,true)
替换为self.start=true
?你确定你仍然会犯同样的错误,因为那会很奇怪。呃,这是我实际上知道但忘记了的事情。谢谢你指出这一点!谢谢你的提示,尽管错误仍然存在。我为startGame
添加了完整的代码,我想知道序列化的territory\u所有者是否是真正的问题。您是否尝试将update\u属性(:start,true)
替换为self.start=true
?你确定你仍然会得到同样的错误,因为那会很奇怪。