我有两个模型项目和任务。每个项目将有7个任务。我希望rails在创建项目后自动创建我的7个任务。
我的任务控制器
def create
@task = Task.new(task_params)
respond_to do |format|
if @task.save
format.html { redirect_to @task, notice: 'Task was successfully created.' }
format.json { render :show, status: :created, location: @task }
else
format.html { render :new }
format.json { render json: @task.errors, status: :unprocessable_entity }
end
end
端
def task_params
params.require(:task).permit(:title, :description)
end
答案 0 :(得分:0)
有几种方法可以做到这一点。
您可以在Project模型中使用回调。我个人不推荐这种方法,因为这不是回调的预期用途,但它可能适合你。
class Project < class Attachment < ActiveRecord::Base
after_create :create_tasks
private
def create_tasks
# Logic here to create the tasks. For example:
# tasks.create!(title: "Some task")
end
end
您可以将子对象构建到表单中,Rails将自动为您创建子对象。查看accepts_nested_attributes_for。这比使用回调更复杂。
表单对象可以是回调和accepts_nested_attributes_for
之间的良好中间点,但它将复杂性提高了一个档次。 Read up more about form objects here。该主题还有一个很好的Rails Casts episode,但需要订阅。
还有其他方法可以做到这一点,因此您需要找到正确的方法。
答案 1 :(得分:0)
另一种选择是使用Observer。这更像是回调。
但这是减少通常在模型类承担与类的核心职责无关的功能时通常会出现的混乱的好方法
class ProjectObserver < ActiveRecord::Observer
def after_create(project)
#add the logic to create tasks
end
end