将 7 天递归添加到 rails 5.2.3 ruby 中的日期的最佳方法是什么
What is the best way to add seven days recursively to a date in ruby on rails 5.2.3
我目前创建多个预订端点,这需要数周时间作为参数“数量”。
到目前为止我有这个:
在我的控制器操作中:
def multiple
@qty = params[:qty]
@booking = Booking.new(booking_params)
if @booking.save
@newbookings = @booking.createmore(@qty)
render json: @newbookings, status: :created
else
render json: @booking.errors, status: :unprocessable_entity
end
end
在我的模型中,我有一个创建多个的例程。
def createmore(quantity)
bookings = []
quantity.to_i.times do
bookings.push(self)
end
puts "#{@bookings}"
newbookings = []
firstBooking = self
bookings.each do | booking |
booking.start = firstBooking.start
booking.end = firstBooking.end
booking.name = firstBooking.name
booking.email = firstBooking.email
booking.contact = firstBooking.contact
newbookings.push(booking)
end
newbookings.each do | booking |
booking.save
end
end
问题是,如何递归地向日期添加一周。即第二次预订增加 7 天,第三次预订增加 14 天,第四次预订增加 21 天,依此类推,直到数量为零。
我可以在 JavaScript 中立即执行此操作,但不知道在 ruby 中从哪里开始。如果有任何帮助,我将不胜感激。
您可以使用 Active Support 中包含的 each_with_index method from the Enumerable module together with the additions to the time management extensions。一个简化的示例如下所示:
bookings.each_with_index do |booking, i|
booking.start = firstBooking.start + i.weeks
end
索引i
从0开始,所以第一次预订将保持原来的开始日期(增加0周)。其余周将比原来的周晚 i
周开始。
编辑
正如 Scott 指出的那样,只要更新其中一个元素,所有元素都会更新。这里的关键是没有一个包含 n
个对象的数组可以独立更新,有一个数组包含 n
个对同一对象的引用,因此对其中一个对象所做的更改适用于所有对象其中
可能您想每次都 push
a copy of the original object 而不是推送原始元素:
quantity.to_i.times do
bookings.push(self.dup)
end
这样一来,实际上将有 n
个原始对象的副本,您将能够分别更新每个副本。
我目前创建多个预订端点,这需要数周时间作为参数“数量”。
到目前为止我有这个:
在我的控制器操作中:
def multiple
@qty = params[:qty]
@booking = Booking.new(booking_params)
if @booking.save
@newbookings = @booking.createmore(@qty)
render json: @newbookings, status: :created
else
render json: @booking.errors, status: :unprocessable_entity
end
end
在我的模型中,我有一个创建多个的例程。
def createmore(quantity)
bookings = []
quantity.to_i.times do
bookings.push(self)
end
puts "#{@bookings}"
newbookings = []
firstBooking = self
bookings.each do | booking |
booking.start = firstBooking.start
booking.end = firstBooking.end
booking.name = firstBooking.name
booking.email = firstBooking.email
booking.contact = firstBooking.contact
newbookings.push(booking)
end
newbookings.each do | booking |
booking.save
end
end
问题是,如何递归地向日期添加一周。即第二次预订增加 7 天,第三次预订增加 14 天,第四次预订增加 21 天,依此类推,直到数量为零。
我可以在 JavaScript 中立即执行此操作,但不知道在 ruby 中从哪里开始。如果有任何帮助,我将不胜感激。
您可以使用 Active Support 中包含的 each_with_index method from the Enumerable module together with the additions to the time management extensions。一个简化的示例如下所示:
bookings.each_with_index do |booking, i|
booking.start = firstBooking.start + i.weeks
end
索引i
从0开始,所以第一次预订将保持原来的开始日期(增加0周)。其余周将比原来的周晚 i
周开始。
编辑
正如 Scott 指出的那样,只要更新其中一个元素,所有元素都会更新。这里的关键是没有一个包含 n
个对象的数组可以独立更新,有一个数组包含 n
个对同一对象的引用,因此对其中一个对象所做的更改适用于所有对象其中
可能您想每次都 push
a copy of the original object 而不是推送原始元素:
quantity.to_i.times do
bookings.push(self.dup)
end
这样一来,实际上将有 n
个原始对象的副本,您将能够分别更新每个副本。