首页 > 解决方案 > 如何在生产中将示例数据填充到我的 Rails 应用程序?

问题描述

我有一个 n00b 问题。我正在使用 Rails 5,并希望在应用程序中有示例数据。当用户创建一个新项目时,该项目应该已经包含用户可以删除或编辑的示例“任务”。

我知道我可以使用 seed.rb 在我的开发环境中创建示例数据。在新用户的生产环境中,最好的方法是什么?如何做?我应该使用 seed.rb、迁移还是 rake 任务?

示例控制器:

  def create
    @project = Project.new(project_params)
    @project.user = current_user

    if @project.save
       // add sample content
       redirect_to @project 
    else
       render :new
    end
  end

在项目模型中:

 belongs_to :user
 has_many :tasks, dependent: :destroy

当新用户加入并创建新项目时,如何在用户创建的新项目上自动添加示例“任务”?

更新:

要创建一个任务,我需要一个描述和当前用户的 id(我正在使用 Devise,所以我可以使用 current_user 助手),例如:

@project.tasks.create!(description: "hello", user_id: current_user.id)

标签: ruby-on-rails

解决方案


您可以构建一个简单的 ServiceObject 来完成这项工作。它允许你保持你的控制器瘦,你可以使用你的current_userDevise 助手来跟踪哪个用户正在创建项目

if @project.save 
  SetupBaseProject.new(project).call
  redirect_to @project
else 
  # handle errors
end

app/services/setup_base_project.rb

class SetupBaseProject 
  def initialize(project, user) 
    @project = project
  end

  def call
    # Create example tasks and any additional setup you want to add
    @project.tasks.create(description: 'Hello World', user: @project.user)
  end    
end 

推荐阅读