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