関連するオブジェクトを変更しても、レールモデルオブジェクトで保存されませんか?

例のこのコードブロックを持つと、モデルクラスが生成されます。

class Block < ActiveRecord::Base
  has_many :bricks, :autosave => true
  def crunch
    bricks.each do |brick|
      if brick.some_condition?
        brick.name = 'New data'
        brick.save # why do I have to call this?
      end
    end 
  end
end
class Brick < ActiveRecord::Base
  belongs_to :block, :autosave => true
end

I found that the only way to make sure the changes within the associated objects get saved for me, was to call brick.save manually. Even thought I use :autosave => true

どうして?

0

2 答え

おそらく、自動保存オプションには誤った名前がついています。ところで、それは期待される行動です。このオプションは関連付けのためのものです。したがって、リレーション内のオブジェクトを変更して他のオブジェクトを保存する場合、次に ActiveRecordは変更されたオブジェクトを保存します。あなたのケースでは、コードを以下のように変更することができます:

  def crunch
    bricks.each do |brick|
      if brick.some_condition?
        brick.name = 'New data'
      end
    end
    save # saving the father with autosave should save the children
  end
0
追加された
より良いが完璧ではない...しかし、ほとんどのプロジェクトがそうするようだ
追加された 著者 pagid,

update_attribute update_attributes update_column などのヘルパーメソッドを使用できます。

More info: Rails: update_attribute vs update_attributes

0
追加された