2011-12-18 3 views
0

имея этот блок кода из примера рельсов класс модели:Изменение связанных объектов не получается с помощью объекта модели рельсов?

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 

Я обнаружил, что единственный способ, чтобы убедиться, что изменения в пределах соответствующих объектов спасутся для меня, должно было назвать brick.save вручную. Даже мысль, которую я использую :autosave => true

Почему?

ответ

0

Возможно, опция автосохранения имеет вводящее в заблуждение имя. Кстати, это ожидаемое поведение. Этот вариант предназначен для объединения. Поэтому, если вы изменяете объект в отношении и сохраняете другой объект , то 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

Смежные вопросы