2015-04-12 3 views
0

Я хочу создать объект (скажем Y) другой модели, как только будет создан объект (скажем, X) одной модели. Объект Y должен принимать некоторые атрибуты объекта X, который был создан. Таким образом, метод after_save должен иметь код, эквивалентный New Y (Object X). Я сомневаюсь, как передать объект X в качестве параметра для вызова New().как передать параметр after_save

ответ

0

Вы всегда можете создать Y, а затем присвоить значения его свойств, а затем вызвать сохранить на Y.

def after_save_func 
    y = y.new 
    y.val1 = self.val1 
    y.val2 - self.val2 
    y.save 
end 

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

+0

ya это так просто. немой. но почему это не работает после каждого сохранения? –

+0

Вы чувствуете, что создаете новый объект для каждого сохранения? Что, если объект будет сохранен 5 раз, тогда у вас будет 5 объектов Y для объекта 1 X. Но, возможно, это имеет смысл для ваших случаев использования. – sdla4ever

+0

ya спасибо, что указали это. Еще одна проблема, о которой я могу сейчас подумать, - изменить значения атрибутов нового объекта, если значения родительского объекта изменяются? –

0

Я не уверен, что нижеследующий код, который я написал в конце концов, является хорошим решением по стандартам дизайна или нет. Но это, кажется, работает для моих требований:

def create_wc 
Workcategory.delete_all(rfsestimationid: self.id) 
@workcategory = Workcategory.new() 
@workcategory.name = self.name + "_" + "#{self.number}" + "_Analysis" 
@workcategory.hours = self.rfstaskset.analysis_hours 
@workcategory.rfsestimationid = self.id 
@workcategory.save 

@workcategory = Workcategory.new() 
@workcategory.name = self.name + "_" + "#{self.number}" + "_Design" 
@workcategory.hours = self.rfstaskset.design_hours 
@workcategory.rfsestimationid = self.id 
@workcategory.save 

@workcategory = Workcategory.new() 
@workcategory.name = self.name + "_" + "#{self.number}" + "_Test" 
@workcategory.hours = self.rfstaskset.test_hours 
@workcategory.rfsestimationid = self.id 
@workcategory.save 

@workcategory = Workcategory.new() 
@workcategory.name = self.name + "_" + "#{self.number}" + "_Build" 
@workcategory.hours = self.rfstaskset.test_hours 
@workcategory.rfsestimationid = self.id 
@workcategory.save 


@workcategory = Workcategory.new() 
@workcategory.name = self.name + "_" + "#{self.number}" + "_UATSupport" 
@workcategory.hours = self.rfstaskset.UATSupport_hours 
@workcategory.rfsestimationid = self.id 
@workcategory.save 

@workcategory = Workcategory.new() 
@workcategory.name = self.name + "_" + "#{self.number}" + "_DepSupport" 
@workcategory.hours = self.rfstaskset.DepSupport_hours 
@workcategory.rfsestimationid = self.id 
@workcategory.save 

end 

В workcategory объекты удаляются каждый раз, родительский объект обновляется и восстановлен в коде выше. Этот код выполняется как операция after_save.

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