0

a newbie here. Just started to learn development. Any help would be greatly appreciated

I have two models Project and Task. Each project will have 7 tasks. I want rails to auto create my 7 tasks after I create a project.

My Task Controller

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

end

def task_params
  params.require(:task).permit(:title, :description)
end
4

2 回答 2

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,但它使复杂性提高了一个档次。在此处阅读有关表单对象的更多信息。还有一个关于该主题的不错的Rails Casts 插曲,但它需要订阅。

还有其他方法可以做到这一点,因此由您决定找到正确的方法。

于 2014-09-15T19:57:14.447 回答
0

另一种选择是使用Observer。这更像是回调。

但这是一个很好的方法来减少当模型类负担与类的核心职责无关的功能时通常会出现的混乱

class ProjectObserver < ActiveRecord::Observer
  def after_create(project)
    #add the logic to create tasks
  end
end
于 2014-09-15T20:01:58.190 回答