Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从Rails 4中的一系列日期创建多个记录_Ruby On Rails_Date_Activerecord_Ruby On Rails 4_Rails Activerecord - Fatal编程技术网

Ruby on rails 如何从Rails 4中的一系列日期创建多个记录

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

我有两个模型,项目和事件。这个项目有很多活动

我想在创建一个项目后自动创建多个事件

我的项目模型有两个日期列prep_start和prep_end

我正在尝试查找准备开始和准备结束之间的日期数组

我创建了一个关注点,它应该在创建一个新的@Project之后自动创建事件。我的关注点(Add_Events.erb)文件如下所示:

 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'”错误。这不是你的代码,可能是我对这两个答案的拼凑。我是新来的…所以我花了一点时间想把你的代码放在哪里。再次感谢。