我正在尝试创建一个记录,并在带有整数和日期的after create回调中递增两个非主要id列。第一列需要使用从1到给定数字的整数自动递增。第二列需要增加一个指定开始日期的日期和7天,14天或30天的日期,这也是指定的。我尝试使用第一个值创建第一个记录,然后从那里递增,但所有记录都保存了相同的整数或日期。
这是代码
def create_positions
@slots = (self.slots - 1)
@payout_date = (self.start_date)
@position = Position.create(:susu_id => self.id, :user_id => 2, :position_number => 1, :pay_in => self.contribution, :payout_date => (@payout_date + self.frequency_in_days.days))
@positions= self.positions.map { |p| p["position_number"] }.last.to_i
@position_number = (@positions += 1)
@dates = self.positions.map { |d| d["payout_date"] }.last
@add_date = (@dates + self.frequency_in_days.days)
@all_positions = @slots.times {Position.create(:susu_id => self.id, :user_id => 2, :position_number => @position_number, :pay_in => self.contribution, :payout_date => @add_date) }
end
我得到的是:1 2 2 2和1/2/14 1/9/14 1/9/14 1/9/14
代替:1 2 3 4和1/2/14 1/9/14 1/16/14 1/23/14
答案 0 :(得分:0)
我缺乏声誉禁止我评论你的原帖,所以我只需要尽力回答你的问题而不要求澄清(因为我不完全理解你对你所尝试的内容的解释做)。
听起来你正在尝试创建四个Position
实例,每个后续位置的position_number比前一个更大,并且payout_date比前一个更晚7天。
如果您正在尝试这样做,请consider the following:
# in the top of your susu model:
after_create :create_positions
# later in your susu model
def create_positions
4.times do |n|
Position.create(susu: self,
user_id: 2,
position_number: n,
pay_in: contribution,
payout_date: start_date + n * frequency_in_days.days)
end
end
你在这个方法的版本中有很多逻辑,所以如果我错过了你需要的东西,请告诉我。
最后,让我指出一些关于我的代码版本的内容:
susu: self
”而不是“:susu => self
”)self
的不必要的调用,该调用被视为bad ruby style user_id: 2
,这似乎你需要在某些时候改变validates_uniqueness_of
失败),它将回滚原始对象的创建。如果您不喜欢这种行为,可以使用after_commit
回调。干杯!