rails - 创建项目后自动创建任务(after_create)

时间:2014-09-15 19:51:55

标签: ruby-on-rails after-create

这是一个新手。刚开始学习发展。任何帮助将不胜感激

我有两个模型项目和任务。每个项目将有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

2 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。

1。通过回调

您可以在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

2。嵌套属性

您可以将子对象构建到表单中,Rails将自动为您创建子对象。查看accepts_nested_attributes_for。这比使用回调更复杂。

3。使用表单对象

表单对象可以是回调和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
相关问题