Создать новые записи в before_save - PullRequest
1 голос
/ 14 октября 2010

При создании новых записей.Мне нужно создать больше записей для той же модели.

Пример ::

class XYZ < ActiveRecord
 def before_save
   # At this point object is already initialized ..
   # And it's containing values.
   # At this point i want to create 10 more records for the same class.
   # something like this
   XYZ.new(:att1 => value1,:att2 => value2,:att3 => self.att1)
 end
end

Как я могу справиться с этим типом сценария?На какой обратный звонок мне нужно создать больше записей для той же модели?

Ответы [ 2 ]

2 голосов
/ 14 октября 2010

Во-первых, это звучит как плохая инженерия, попробуйте переосмыслить вашу модель так, чтобы она получала то, что вам нужно.может быть, если вам нужно создать 10 моделей чего-либо, не используйте ловушки activerecord, иначе вы можете столкнуться с бесконечными циклами.

Я бы порекомендовал

class XYZ < ActiveRecord
 def self.create10(original_xyz)
   10.times do
     clone = original_xyz.clone
     clone.save
   end
 end
end

и где в вашем контроллере иливезде, где вам нужно создать еще 10, звоните:

new_xyz = XYZ.new(:att1 => value1,:att2 => value2,:att3 => self.att1)
new_xyz.save
XYZ.create10(new_xyz)

, но если вам действительно нужно создать еще 10 на крючке (как перед сохранением), выполните:

class XYZ < ActiveRecord

 before_save create10

 attr_acessor :cloned 

 def create10
   return if cloned # this will prevent infinit loooooooooooooooop
   10.times do
     clone = self.clone
     clone.cloned = true
     clone.save
   end
 end

end

Я не запускал это, поэтому попробуйте сначала.

0 голосов
/ 14 октября 2010
class XYZ < ActiveRecord
 def after_initialize
   # At this point object is already initialized ..
   # And it's containing values.
   # At this point i want to create 10 moew records for the same class.
   # something like this
   #XYZ.new(:att1 => value1,:att2 => value2,:att3 => self.att1)
   x = 10 #an integer
   x.times do |task|
     Model.create(:key => :value)
   end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...