ruby-on-rails - 如何在生产中将示例数据填充到我的 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)
解决方案
您可以构建一个简单的 ServiceObject 来完成这项工作。它允许你保持你的控制器瘦,你可以使用你的current_user
Devise 助手来跟踪哪个用户正在创建项目
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
推荐阅读
- python - Python:文件未找到错误。没有这样的文件或目录
- docker - 是否有通用的容器签名验证方法?
- reactjs - 在反应中抽象组件映射
- php - 在 Laravel 中验证后显示错误消息
- python - 使用python计算库存价值
- c# - Unity Mirror Networking InvalidCastException:指定的强制转换无效
- c - 为什么有些工作有些不工作(指针和非)
- html - 是否可以在滚动条拇指上使用关键帧动画?
- google-cloud-platform - GCP 云数据传输 - 任何通知?
- mysql - 为什么 SQL 查询挂在 MySQL 上而 MSSQL 正常