2012-03-27 24 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

相關問題