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

+0

コレクションを反復してそれぞれを変更した後、変更は反映されません。私は上記の例でWalterと名付けられた100のミツバチを見たいと思います。 –

+0

> h.bees.countは何を返しますか? – Norto23

答えて

2

...

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

validates_uniqueness_of :name 
+0

そのような検証はありません。そこに条件なし。私はブロックの代わりにdo/endを試してみましたが、レールコンソールに同じ効果がありました –

+0

セーブはうまくいきますが、トランザクションを追加するのを避けることができますが、今は2人が私にできることを示唆しています。私はそれが楽観的なロック –

2

のための検証がない場合は、変更を永続化するために、あなたのブロック内()を呼び出す保存してください。

+0

が動作するが、私はむしろ私は関係を介して同じobjsへの参照を維持することができます私はむしろトランザクションのオーバーヘッドを作成したいと思います –

関連する問題