2012-03-27 38 views
1

我做错了事情,它要么在方法我试图改变数据或我有一个关联定义的方式。正确的方式定义一个关联,以便我可以通过关联来更改数据

class Hive 
    has_many :bees, :dependent => :destroy 
end 

class Bee 
    belongs_to :hive 
    attr_accessor :alive, :name 
end 

>h = Hive.create() 
>h.bees.where(:alive => false).count = 100 #created from after_initialize 
>h.bees.where(:alive => false).each {|b|b.name="Walter"} 
>h.bees.where(:name => "Walter").count = 0 

我在做什么错?

谢谢!

+0

你得到什么错误? – Norto23 2012-03-27 01:12:13

+0

迭代收集并更改其中的每一个后,变化都不会反映出来。在上面的例子中,我想看到100只名叫Walter的蜜蜂。 – 2012-03-27 01:16:30

+0

> h.bees.count返回什么? – Norto23 2012-03-27 01:21:20

回答

2

这应该做的伎俩......

h.bees.each do |bee| 
    bee.name = "Walter" 
    bee.save! 
end 

如果没有为

validates_uniqueness_of :name 
+0

没有像这样的验证,这看起来像我一样那里没有条件。我试图做/结束,而不是块,它具有相同的效果,在轨道控制台 – 2012-03-27 01:41:27

+0

保存没有工作,我希望我可以避免添加交易,但现在,两个人已经表明,也许,我所能做的。我想这是更好的这种方式来支持乐观锁 – 2012-03-27 01:51:38

2

没有验证尝试调用save()的块中坚持的变化。

+0

这将工作,但我宁愿不创建事务开销,如果我可以维护通过关系相同的对象的引用 – 2012-03-27 01:45:22

相关问题