什麽时候知道自己已经是大叔了...从看到国民妹妹会露出姨母笑时...
或许这部分比较简单,网路上查不到太多中文资料,自己纪录笔记一下。
专案中:project_name/db/seeds.rb
与Migrate这些资料放在一起,之前有简单操作过Migration,主要是在建立资料部分,当然seeds也与此相关。
当我们於专案中,用Rails console来操作建立新资料。(练习请用Rails console --sandbox)
#Model_name.new
2.7.3 :001 > Player.new
=> #<Player id: nil, name: nil, power: nil, country: nil, created_at: nil, updated_at: nil, level: 2>
#可以发现,除了level我有给预设的value外,其余值都是nil,代表只是给了一个"壳"。
Create与Save差异在於有没有自动接save,new没有。
#Model_name.create
2.7.3 :002 > Player.create
#略过一段程序码。
=> #<Player id: 21, name: nil, power: nil, country: nil, created_at: "2021-08-20 06:17:11.601626000 +0000", updated_at: "2021-08-20 06:17:11.601626000 +0000", level: 2>
#框架中,action: create未做处理前,直接会执行action: save。
一样可以发现除了Rails中预设会给资料的id与timestamps外,其余资料还是nil。
当然是给参数。
2.7.3 :007 > Player.create(name: "大叔", power: 10, country: "台北", level: 3)
#略
TRANSACTION (0.1ms) RELEASE SAVEPOINT active_record_1
=> #<Player id: 25, name: "大叔", power: 10, country: "台北", created_at: "2021-08-20 06:31:34.412628000 +0000", updated_at: "2021-08-20 06:31:34.412628000 +0000", level: 3>
#预设值一样可以手动给,预设值比较像,先设定好一个值,如果我们没给会给那个值
那就输入10次..
会这麽勤劳有鬼...
2.7.3 :008 > 10.times do Player.create end
#中间跑一大段英文,有10段重复的...略
=> 10 #还贴心回传个10,代表跑完了
$ 10.times do Model_name.create end
$ 10.times do Model_name.create end
$ 10.times do Model_name.create end
好的,不可能这麽麻烦。
内建Rake指令之一(预设无内容),用於後台快速建立资料。
#project_name/db/seeds.rb
10.times do
Player.create(name: "大叔", power: 2, country: "台北")
end
puts "跑完了" #可加可不加,习惯有提示所以加。
於rails console,执行
$ rails db:seed
正常会跑出"跑完了",再去资料库查看,或以指令查,可以发现建立好10笔大叔资料了。
所以当要建立测试资料,也不可能去view真的操作10次,以seeds来处理。
5.times do |i|
Product.create(name: "Product ##{i}", description: "A product.")
end
# 透过语法当然可以创建内容较不同的资料。
gem。
安装後我们先於irb操作。
$ require 'faker' #gem为第三方函式库,使用前须require。
=> true #跳false当然代表失败,先确认有无正确安装吧。
$ Faker::Game.title
=> "Bayonetta"
$ Faker::Games::Heroes.name
=> "Moandor"
Bayonetta...刚好是喜欢的游戏,传教一下...
先不论看不看得懂指令原理,可以知道经过Faker这个gem,可以创建许多"资料"。
当然有些资料很明显是内建打包好的。
於rails console操作,如有正确安装於gemfile并bundle,gem会属於专案本身一部分,不需要require。
$ Player.create(name: Faker::Name.name)
=> #<Player id: 43, name: "Lacy Farrell", power: nil, country: nil, created_at: "2021-08-20 07:42:40.736607000 +0000", updated_at: "2021-08-20 07:42:40.736607000 +0000", level: 2>
$ Player.create(name: Faker::Name.name, power: rand(4..10), country: Faker::Address.
country)
=> #<Player id: 45, name: "Cleo Abbott",
power: 6,
country: "Kyrgyz Republic",
created_at: "2021-08-20 07:46:33.362240000 +0000",
updated_at: "2021-08-20 07:46:33.362240000 +0000",
level: 2>
所以将指令搬到seeds.rb。
当指令多时,以後只需要一个指令完成。
10.times do
Player.create(
name: Faker::Name.name,
power: rand(4..10),
country: Faker::Address.country)
end
puts "跑完了"
如果想建立其他语系资料,需先改Faker的locales,seeds.rb直接加入下面这段即可。
Faker::Config.locale = "zh-TW"
10.times do
Player.create(
name: Faker::Name.nam
略....
Faker支援语系https://github.com/faker-ruby/faker/tree/master/lib/locales
繁体中文支援哪些资料(不支援的一样只会给英文)。
https://github.com/faker-ruby/faker/blob/master/lib/locales/zh-TW.yml
上面其实已经讲解完怎麽操作,及内容怎麽写。(用Ruby写...)
不过seeds.rb其实是透过 rails db:seed 这指令来执行其内容,实际编写还是有不同的地方。
维基百科:
Rake是一款软件任务管理及组建自动化工具。用户可指定任务、描述依赖关系及分组命名空间中的任务。
Rake使用Ruby编写,使用以Ruby语法编写的Rakefile。
Rake使用Ruby的匿名函数块来定义多个任务并允许用户使用Ruby语法。
Rake其实就是"脚本"或"任务"。
请於专案下执行
$ rails -T #rake -T 也可。
出现的那一堆就是已经内建好的rake,应该说建立好的"task"
补充:不加 -T,rake指令不会有描述档,还会出现generate, console等指令。
-T,代表叫出有描述档的。(description)
project_name/lib/tasks 这个资料夹,为存放处。
副档案名以".rake"命名。
# project_name/lib/tasks/rake_demo01.rake
task :rake_name_free do
puts "偷懒就用Hello world"
end
存挡後执行
$ rails rake_name_free
=> 偷懒就用Hello world
没加入description前,rails -T里面是不会出现自己建立的task的。
加入方式。
# project_name/lib/tasks/rake_demo01.rake
desc "人生第一只rake..." #就这麽简单
task :rake_name_free do
puts "偷懒就用Hello world"
end
$ rails -T
其实是,可能在方法命名上,内容即使不同,但命名的灵感已经不够时,可以用namespace这个方法处理。
首先建立两个档案
# project_name/lib/tasks/rake_demo01.rake
desc "人生第一只rake..."
task :rake_test do
puts "偷懒就用Hello world"
end
# project_name/lib/tasks/rake_demo01.rake
desc "人生第二只rake..."
task :rake_test do
puts "继续偷懒就继续用Hello world"
end
执行
$ rails -T
会发现只有一个rake,两个描述。
执行会发现
$ rails rake_name_free
偷懒就用Hello world
继续偷懒就继续用Hello world
两个都会跑,如果是想这样一次跑两个rake....
可以,但通常不这样做,等等提。
先以namespace处理。
namespace :this_is_two do
desc "人生第二只rake..."
task :rake_name_free do
puts "继续偷懒就继续用Hello world"
end
end
存挡执行rails -T,会发现。
$ rails this_is_two:rake_name_free
继续偷懒就继续用Hello world
档案内容先做修改
#first.rake
desc "人生第一只rake..."
task :rake_name_free do
puts "偷懒就用Hello world"
end
#second.rake
desc "人生第二只rake..."
task :rake_two do
puts "继续偷懒就继续用Hello world"
end
在建立一个新档案。
# 我不会数三.rb
desc "G胖不会数3"
task :rake_three => ["rake_name_free","rake_two"]
$ rails rake_three
偷懒就用Hello world
继续偷懒就继续用Hello world
将first.rake修改
task :rake_name_free do
puts "偷懒就用Hello world"
Rake::Task["rake_two"].execute
end
#执行
$ rails rake_name_free
偷懒就用Hello world
继续偷懒就继续用Hello world
衍生:Rake Task中Invoke, Execute, Enhance差异
超过幼幼班等级,不想介绍...
Rake tasks都预设是在development环境下操作,当然可以把指令改在其他环境操作。
不过目前部署网站都支援,可以设定指定task,所以查找各部署网站教学比较适合。
逻辑笑话?:
我以为切洋葱时闭眼睛就不会流眼泪了,但是我手流血了~
<<: Video播放器 PyQt5 QMediaPlayer
Day 11 - Kotlin的函式(2) 昨天我们讲了list集合,以及如何取得数值,今天我们要继...
前言 一开始先接续昨天读取资料的部分,先使用pd.read_csv来读取资料 再利用DataFram...
在有线网路应用(二)的应用中,使用树莓派当成主路由,乙太网路线为WAN,WIFI为LAN的布局。不过...
Basics of Color Light and Spectra(光和光谱) 可见光(visibl...
当我在Unreal Engine 4.27.0下载好试图启动软件时,跳出了下面这个视窗, U...