Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.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 在创建时创建30条空记录_Ruby On Rails - Fatal编程技术网

Ruby on rails 在创建时创建30条空记录

Ruby on rails 在创建时创建30条空记录,ruby-on-rails,Ruby On Rails,我正在开发一个健身追踪应用程序,我们鼓励你追踪一个习惯30天 每个用户都有很多项目,项目属于用户,项目有很多任务,任务属于项目 我想做的是,当创建一个项目时,我想填充30个空任务,这些任务将按天的顺序显示,并允许用户单击一天并更新任务。(见图) 如果您需要参考,我很乐意发布任何代码/视图。 谢谢你的帮助 您可以利用,它允许您在为特定模型创建新记录时执行任务: class Project < ActiveRecord::Base has_many :tasks after

我正在开发一个健身追踪应用程序,我们鼓励你追踪一个习惯30天

每个用户都有很多项目,项目属于用户,项目有很多任务,任务属于项目

我想做的是,当创建一个项目时,我想填充30个空任务,这些任务将按天的顺序显示,并允许用户单击一天并更新任务。(见图)

如果您需要参考,我很乐意发布任何代码/视图。 谢谢你的帮助

您可以利用,它允许您在为特定模型创建新记录时执行任务:

class Project < ActiveRecord::Base
    has_many :tasks

    after_create :create_empty_tasks

    private
        def create_empty_tasks
            # Create your 30 Task objects
            30.times do |i|
                Task.create(day: (i + 1), project: self) # Update to match your schema
            end
        end
end
class项目
当然,您需要更新该代码以将任何特定于用户的数据传递到
任务中,但希望回调是一个良好的起点。

您可以利用它,它允许您在为某个模型创建新记录时执行任务:

class Project < ActiveRecord::Base
    has_many :tasks

    after_create :create_empty_tasks

    private
        def create_empty_tasks
            # Create your 30 Task objects
            30.times do |i|
                Task.create(day: (i + 1), project: self) # Update to match your schema
            end
        end
end
class Project < ActiveRecord::Base
  has_many :tasks

  def create_tasks!(n = 30)
    self.class.transaction do
      1..n.each do |day|
        self.tasks.create(day: day)
      end 
    end
  end
end
class项目
当然,您需要更新该代码以将任何特定于用户的数据传递到
任务
,但希望回调是一个良好的起点

class Project < ActiveRecord::Base
  has_many :tasks

  def create_tasks!(n = 30)
    self.class.transaction do
      1..n.each do |day|
        self.tasks.create(day: day)
      end 
    end
  end
end
另一种方法是在控制器中调用它:

class ProjectsController < ApplicationController
  def create
    @project = Project.new(project_params)
    if @project.save
      @project.create_tasks!
      redirect_to @project
    else
      render :new
    end
  end 
end
class ProjectsController
这使您能够更好地控制它在应用程序中发生的确切位置

另一种方法是在控制器中调用它:

class ProjectsController < ApplicationController
  def create
    @project = Project.new(project_params)
    if @project.save
      @project.create_tasks!
      redirect_to @project
    else
      render :new
    end
  end 
end
class ProjectsController

这使您能够更好地控制它在应用程序中的确切位置。

可能希望执行
任务。创建(day:(i+1),project:self)
将新任务分配给正在创建的项目。@FrederikSpang感谢您的建议,我已经添加了这一点和一个额外的noteWell或
self.tasks可能需要执行
Task.create(day:(I+1),project:self)
,用于将新任务分配给正在创建的项目。@FrederikSpang感谢您的建议,我已经添加了这一点和一个额外的noteWell或
self.tasks,我建议不要创建30条记录。在客户端,使用默认值(可以通过Task.new创建而不保存)按月天数而不是按记录显示元素。我建议不要创建30条记录。在客户端,使用默认值(可以通过Task.new创建而不保存)按月天数而不是按记录显示元素。这太棒了!正是我需要的!这太棒了!正是我需要的!