Ruby on rails 如何从Rails 4中的一系列日期创建多个记录
我有两个模型,项目和事件。这个项目有很多活动 我想在创建一个项目后自动创建多个事件 我的项目模型有两个日期列prep_start和prep_end 我正在尝试查找准备开始和准备结束之间的日期数组 我创建了一个关注点,它应该在创建一个新的@Project之后自动创建事件。我的关注点(Add_Events.erb)文件如下所示:Ruby on rails 如何从Rails 4中的一系列日期创建多个记录,ruby-on-rails,date,activerecord,ruby-on-rails-4,rails-activerecord,Ruby On Rails,Date,Activerecord,Ruby On Rails 4,Rails Activerecord,我有两个模型,项目和事件。这个项目有很多活动 我想在创建一个项目后自动创建多个事件 我的项目模型有两个日期列prep_start和prep_end 我正在尝试查找准备开始和准备结束之间的日期数组 我创建了一个关注点,它应该在创建一个新的@Project之后自动创建事件。我的关注点(Add_Events.erb)文件如下所示: module AddEvents extend ActiveSupport::Concern included do after_create :eve
module AddEvents
extend ActiveSupport::Concern
included do
after_create :event_dates, :add_events
end
def event_dates
@project = Project.new
(@project.prep_start..@project.prep_end)
end
end
def add_events
@event_dates.each do |event_date|
self.events.create!(occurs_on: event_date)
end
end
我无法完成数组。我假设您希望每天创建事件,对吗?首先,您需要找到开始日期和结束日期之间的日期数组。有一个非常好的红宝石,可以帮助你做到这一点 一旦有了日期数组,就可以循环使用它们并创建事件:
def create_events
# Assuming you have @event_dates = ["2014-09-20", "2014-09-21", "2014-09-22", "2014-09-23"]
@event_dates.each do |event_date|
self.events.create!(event_date: event_date)
end
end
Ruby范围(x..y)是可枚举对象,这意味着您可以在它们上执行每个操作
迭代一系列日期可以很好地工作,但是迭代一系列日期时间将在范围的开始和结束之间产生每秒。
(它还会发出很多警告,因为datetime上的succ方法已过时)
因此,您必须确保您的项目是日期类型
在date、Time、DateTime和TimeWithZone实例上调用_date是安全的,下面的示例应该可以做到这一点
(project.start_at.to_date .. project.end_at.to_date).each do |date|
Event.create(:occurs_at => date)
end
谢谢(对不起,我这周工作…回复时间长)。我尽量不使用太多的gems,因此我更新了我的问题,以反映我如何尝试查找project.prep_start和project.prep_end之间的日期数组。谢谢你的帮助…我还在工作。谢谢你!我无法使阵列在我的关注文件中正常工作。它不断为nil:NilClass抛出“未定义的方法`each'”错误。这不是你的代码,可能是我对这两个答案的拼凑。我是新来的…所以我花了一点时间想把你的代码放在哪里。再次感谢。