我有几个表,我想以一种尊重和说明他们的关系的方式添加大约10行数据.
如何将种子数据(虚拟数据)添加到应用程序的开发数据库进行测试?
我希望有人能指出我这样做的铁路友好方法.
有没有一种简单的方法在每个表透视控制器中制作CRUD方法?
我可以转储一个heroku数据库$ heroku pgbackups:capture
.此外,此SO帖子显示有一些工具可用于获取开发数据库并将其转储到seed.rb.
我想知道是否有一种简单的方法来组合这两个过程,有效地将数据从生产Heroku数据库转储到我的本地seeds.rb中,以进行更真实的开发测试.
如果可以的话,最干净的方法是什么?
更新:
根据dB'的深刻回答,我可能会考虑在本地使用PGSQL.但是,我仍然对问题的seed.rb方面感兴趣,如果有办法轻松地做到这一点.
目标 - 在单个部署/重启中,我想创建一个新表并填充一些记录,因为会有代码更改,期望这些数据存在.
理想 - 编写实现此目的的迁移.想象一下,我已经创建了我的Foo
类,生成了一个用于创建foo
表grails dbm-gorm-diff ....
的迁移,并使用它来运行迁移grails dbm-update
.我现在有我的域类和我的数据库表.凉.
现在我将编写一个填充表的新迁移.
databaseChangeLog = {
changeSet(author: "samslotsky", id: "PopulateFooTable") {
grailsChange {
change {
new Foo(bar: 'baz').save()
new Foo(bar: 'blitz').save()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将把它添加到changelog.groovy
include file: 'populate-foo-table.groovy'
Run Code Online (Sandbox Code Playgroud)
grails dbm-update
再次运行后,我的foo
表中没有记录.这不是验证问题,因为我可以Foo
从应用程序代码中创建对象.我甚至不确定如何判断我的迁移是否已执行,因为断点似乎没有在迁移中捕获.
所以我想有两个好问题要问:
我意识到我可以先创建表和域类,部署它,创建导入工具或管理界面来播种数据,然后修改代码以使用数据.我真的不想完成所有这些.我应该能够通过单一部署无缝地完成此任务,就像我在Rails中一样.
谢谢!
尝试填充我的sqlite数据库时遇到问题.关于特定错误"finder_needs_type_condition?"的信息不多.我可以找到,但我对Rails没有多少经验,甚至怀疑问题可能在哪里.
模型:
class Character < ActiveRecord::Base
validates :user_id, :name, :class, presence: true
end
Run Code Online (Sandbox Code Playgroud)
控制器:
class CharactersController < ApplicationController
before_action :authenticate_user!
respond_to :json
@user_id = current_user[:id]
def index
@characters = Character.all
end
def show
@character = Character.find(params[:id])
end
def new
@character = Character.new
end
def create
@characters = Character.all
@character = Character.create(character_params)
end
private
def character_params
params.require(:character).permit(:user_id, :name, :class)
end
end
Run Code Online (Sandbox Code Playgroud)
schema.rb:
create_table "characters", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "name"
t.string "class"
t.integer …
Run Code Online (Sandbox Code Playgroud) 我想在我的cmd上使用php artisan db:seed命令,但它说Label'DB'已经定义,
这是我的SeederTableAnggota代码:
<?php
use Illuminate\Database\Seeder;
class SeederTableAnggota extends Seeder {
Public function run()
{
DB:table('anggota')->delete();
$anggota= array(
array('id'=>1,'nama'=>'Rizki Amelia Dewi','alamat'=>'Cilengsi'),
array('id'=>2,'nama'=>'Dewi Ayunindita','alamat'=>'Jatinangor'),
array('id'=>3,'nama'=>'Siti Hajar Riska','alamat'=>'Jakarta')
);
DB:table('anggota')->insert('anggota');
}
}
Run Code Online (Sandbox Code Playgroud)
我已经在我的DatabaseSeeder.php上使用了$ this-> call('SeederTableAnggota').
我已经在我的cmd上使用了composer dump-autoload.
那么我如何使用db:seed以及为什么它说Label'DB'已经定义了?感谢您的帮助,任何帮助都将非常有用
我使用 Faker gem 为我的数据库植入虚假数据。对于某些变量,我例如使用Faker::Lorem.paragraph(4)
. 但我真正想要的是用带有样式的文本播种。比如<p></p><b>
等等。这可以用 Faker 宝石吗?
我在数据库播种期间在控制台中引发了一个错误:
"Trying to get property of non-object"
Run Code Online (Sandbox Code Playgroud)
但我找不到这行,因为文件太多。是否有任何应付这种情况的提示?
我正在为我的公司构建一个Rails应用程序.我的seeds.rb文件包含用于将我的用户列表与我们的Office 365目录同步的代码,每次在目录中发生更改时都需要这样做,并且我正在尝试构建应用内"种子"按钮以便没有Rails/Heroku知识可以启动该过程.
正如您在下面的代码摘录中所看到的,我已经发现我可以通过调用rails db:seed
shell命令来实现这一点,但感觉应该有一个不那么迂回的方式来做这个比Rails应用程序调用shell命令对自己进行操作.
有没有办法在应用程序内实际运行seeds.rb中的代码,或者调用rails db:seed
我最接近的代码?
应用程序/视图/布局/ _header.html.erb
...
<li><%= link_to "Sync users with O365", seed_path %></li>
...
Run Code Online (Sandbox Code Playgroud)
配置/ routes.rb中
...
get '/seed', to: 'application#seed'
...
Run Code Online (Sandbox Code Playgroud)
应用程序/控制器/ application_controller.rb
...
def seed
`rails db:seed`
redirect_back_or root_path
end
...
Run Code Online (Sandbox Code Playgroud) 现在我正在开发中,并使用下面的代码来播种查找表。但是一旦投入生产,我想添加额外的数据,我该怎么做?我是否在播种方法中使用某种 AddOrUpdate (不在核心中)?编写 SQL 脚本?
private static async Task SeedRfReportStateTypesAsync(PwdrsContext pwdrsContext)
{
if (pwdrsContext.RfReportStateTypes.Any())
{
return;
}
List<RfReportStateType> rfReportStateTypes = new List<RfReportStateType>()
{
new RfReportStateType() { Name = "Draft", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now}, //4
new RfReportStateType() { Name = "Review", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now}, //3
new RfReportStateType() { Name = "Stage", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now}, //2
new RfReportStateType() { Name = "Prod", UpdatedBy = "SYSTEM", UpdatedOn = DateTime.Now} //1
};
pwdrsContext.RfReportStateTypes.AddRange(rfReportStateTypes);
await pwdrsContext.SaveChangesAsync();
}
Run Code Online (Sandbox Code Playgroud) 我做了一个小db/seeds.rb
文件:
web = Website.find_or_create_by(id: 1) do |w|
w.website = "http://example.dev/"
w.banner_msg = "Hey! Banner message!"
w.signup_msg = "Wahey! Sign up message!"
w.bg_col = "#333"
w.txt_col = "#EEE"
w.btn_col = "#999"
end
pub = Publisher.find_or_create_by(id: 1) do |p|
p.phone = "021 111 1111"
p.website = web
end
User.find_or_create_by(id: 1) do |u|
u.email = 'email@email.com'
u.password = 'password'
u.first_name = 'Joe'
u.last_name = 'Bob'
u.publisher = pub
end
User.create(id: 5, email: "hello@ds.dfs")
Run Code Online (Sandbox Code Playgroud)
当我运行时rake db:seed
,终端只接受命令并呈现一个新行,没有错误消息,没有"rake abort!",没有.
当我检查Rails控制台中的字段时,那里什么也没有.发生了什么?