如何将参数传递给after_save

时间:2015-04-12 03:53:30

标签: ruby-on-rails

我想在创建一个模型的对象(比如X)时创建另一个模型的对象(比如Y)。对象Y需要获取已创建的对象X的某些属性。所以after_save方法基本上应该有相当于New Y(Object X)的代码。我的疑问是如何将对象X作为参数传递给New()调用。

2 个答案:

答案 0 :(得分:1)

您可以随时创建Y,然后为其分配值,然后在Y上调用save。

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

但是这个方法将在每次保存后调用,这看起来更像是after_create会是最好的吗?

答案 1 :(得分: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操作执行。