Rails5 Model Document
创建: 2017/06/09
更新: 2017/06/21
待完成事项: TODO
模型(model) | |||||||||||||||||||||||||||||||||||||||||||||||||||
生成 | rails generate model name field:type [...] [options] P48 # TODO: options 类型首字母不大写 app 例子: rails g model questionnaire question:string veryAgree:boolean agree:boolean disagree:boolean veryDisagree:boolean
|
||||||||||||||||||||||||||||||||||||||||||||||||||
迁移文件的生成 |
和模型一起生成 rails generate model name field:type [...]
[options] 例: rails generate migration AddBirthToAuthors birth: date 生成的文件名 20180216002328_add_birth_to_authrs.rb 文件内容 #20180216002328_add_birth_to_authrs.rb class AddBirthToAuthors < ActiveRecord:: Migration[5.0] def change add_ column :authors, :birth, :date end end
|
||||||||||||||||||||||||||||||||||||||||||||||||||
自带属性 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
rails命令行 | 命令行测试模块(model)
|
||||||||||||||||||||||||||||||||||||||||||||||||||
查看履历 | rails
db:migrate:status ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ |
||||||||||||||||||||||||||||||||||||||||||||||||||
生成数据库 | rake db:create:all | ||||||||||||||||||||||||||||||||||||||||||||||||||
设定数据库 | rails db:migrate
|
||||||||||||||||||||||||||||||||||||||||||||||||||
生成并读取数据库 | rails db:setup 相当于 rails db:create:all rails db:migrate rails db:seed 或者 rails db:fixtures:load |
||||||||||||||||||||||||||||||||||||||||||||||||||
schema来构筑数据库 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||
seed | 初始数据来初始化(也可以用fixture)
|
||||||||||||||||||||||||||||||||||||||||||||||||||
fixture | 测试数据来初始化(也可以用seed)
|
||||||||||||||||||||||||||||||||||||||||||||||||||
读取 | rails db:fixtures:load (FIXTURES=samples) | ||||||||||||||||||||||||||||||||||||||||||||||||||
初始化 | rails db:reset
(DISABLE_DATABASE_ENVIROMENT_CHECK=1) 括号内内容是删除production模式的数据库 windows下development模式好像也要 |
||||||||||||||||||||||||||||||||||||||||||||||||||
删除 | rails db:drop:all
(DISABLE_DATABASE_ENVIROMENT_CHECK=1) 括号内内容是删除production模式的数据库 windows下development模式好像也要 |
||||||||||||||||||||||||||||||||||||||||||||||||||
服务器客户端 |
|
基本的数据检索 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
主键(key)搜索 | Class.find(keys) 返回主键所对应的数据(一对一)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定键搜索 | Class.find_by(key, value [,...]) 搜索指定的键对应的值 可以指定多个键来追加限制 返回找到的第一个 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
搜索不存在则创建 | Class.find_or_create_by(同上) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
复杂条件下的数据检索 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设定基本条件式 |
Class.where(exp) ● joins/includes等关联搜索的参数写法 where(关联表格名: {关联处的搜索条件} ) cars = cars.includes(:equipment_spec).where(equipment_specs: { power_window: true })
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用占位符生成条件式 |
Class.where(exp [, value, ...]) 不等于是not, 只用于不是nil http://railsdoc.com/references/where
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
where的否定 | Class.where.not(...) 参数和where一样 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
or | Class.where(...).or(Class.where(...)) ModelTest.where('ap <= ?', 1000).or(ModelTest.where('def > :def', :def => 4000)) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
排序 | Class.where(...).order(sort)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
重排 |
Class.where(...).order(sort).reorder(sort) 写法和order一样 作用是覆盖前面的order 如果只是想清空前面的order,指定nil |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定读取的列 |
Class.where(...).select(cols) 默认获取所有的列, 用这个方法可以指定具体要获得的列
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
去除重复 | Class.where(...).distinct(flag) Class.select(...).distinct(flag)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取特定范围 | limit/offset 和order一起用才有现实意义 limit(rows) offset(off)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取开头/结尾数据 | Class.first Class.last (也可以用limit(0)) 不能惰性读取,必须放在方法链最后 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
分组 | Class.where(...).group(key) 可以指定多个 :a, :b, :c, ... |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
进一步提取信息 |
Class. group (key).have(exp) exp写法参照p206 # TODO: @having = ModelTest.all.group(:israre).having('hp >= ?', 0)\ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
select中使用SQL函数 | 例: Book.select('AVG(sample) AS
avg_sample') 用AS设定名称 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
去除条件 |
Class.where(...).select(...)unscope(...).unscope(...) 注意:unscoped是删除之前的所以条件
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
返回空对象 | Class.none Class.where(...)....none 注意: null是空,Class.none这类是空对象(NullObject),可以呼出each等而不出错 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取数据的其他方法 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
以数组形式取出列 | Class.where(...).pluck(column [,...]) 例:ModelTest.all.pluck(:israre, :mp) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
确认指定的数据是否存在 | Class.where(...).exists? | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
自定义模型搜索方法 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
命名空间 (Named Scope) |
scope :name, ->{ ... } scope :rare, -> { where('israre = :israre', israre: true) } 位置: /app/models/... 调用: sample = Class.where(...).scope-name |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
设置默认方法 | default_scope { ... } 位置: /app/models/... 例: default_scope { order_with_hp } scope :order_with_hp, ->{ order(:hp) } |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
计算结果类 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
获取结果的行数(数量) | Class.where(...).count Class.where(...).size Class.where(...).length 推荐用size,基本没有错 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
计算类 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
直接使用SQL命令 | 一般都用query method, 尽量不要直接用SQL命令 find_by_sql(sql)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
记录(record)的登陆,更新,删除 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
基础 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
新建 | Class.new/build Class.new(...) Class.build(...) 哈希表形式指定 {:hp => 54321, :mp => 12345, israre: false} @new = ModelTest.new({:hp => 54321, :mp => 12345, israre: false}) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
新建+保存 | Class.create | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
登陆(保存) | Class#save 返回true/false 注: @sample.save!失败返回例外(用于transaction) 例: @sample.save |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
更新 | @sample.update(...) 返回true/false 哈希表形式指定 {:hp => 54321, :mp => 12345, israre: false} 用于已经存在的记录(record) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
删除 | @sample.delete delete(keys) 单纯删除(直接执行SQL, 不经过Active Recode) destroy(keys) 先选择后删除, 新手还没理解delete的时候全用destroy就行 例子: sample.delete Class.delete(id) 注: 用对象呼出时候不用指定id |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
进一步的操作 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
全部更新 | Class.where(...).update_all(updates) 返回改动的行数 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
删除 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
全部删除 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
transaction 事务 |
def transaction Class.transaction do .... raise ... .... raise ... ... end rescue => e ... end 用发出异常来终止transaction 也可以用模块对象来呼出transaction 经常用@sample.save! 失败返回例外
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
同时运行的管理 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
定义枚举的的域 | 用与设置数字与符号的对应
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
其他更新类方法 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
P245 | 暂略 # TODO: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
实现验证功能(validation) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ActiveModel可用的validation |
通用参数: 注: 可以直接设置成全部适用, 如 validates :id, allow_blank: true, length: { is: 10 }, uniqueness: true 或对特地验证适用, 如 validates :id, length: {allow_blank: true, is: 10}, uniqueness: true
with_options: with_options(on: :create, if: 'true') do |oc| oc.validates :name, presence: true oc.validates :user_id, presence: true end
ActiveModel可用的validation:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
声明validate |
validates field [, ...] name: params [, ...] 参数含义:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
validate触发时机 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
errors |
errors (ActiveModel::Errors类) 前提: 设定了validates, 不然不会有任何错误
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
自定义validator1 |
直接呼出方法 validates :method_name [, ...]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
自定义validator2 |
设置 # config/application.rb # ... module Core class Application < Rails::Application # ... # add custom validators path config.autoload_paths += Dir["#{config.root}/app/models/validators"] config.enable_dependency_loading = true # ... end end 创建文件 # app/models/validators/sample_validator.rb class SampleValidator < ActiveModel::EachValidator def validate_each(record, attribute, value) puts "UUID custom validate fired, options: #{options}" # 获取options的方法 record.errors[attribute.to_sym] << "test" # 错误通过此方法发出 end end 使用 # sample.rb # ... class Sample < ApplicationRecord # ... validates :user_id, sample: {ko: "ok", sample1: 1} # ... end # 运行 rails c a = Sample.new a.valid? # => false # UUID custom validate fired, options: {:ko=>"ok", :sample1=>1}
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
定义不与数据库关联的model | # TODO: 需要的时候完成此项 2019/02/21 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用关联(association)处理复杂表格 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
命名规则 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
参照的设置 | belongs_to assoc_id [,opt] 例: belongs_to :modeltest1 一对一关系
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一对多 | has_many assoc_id [,opt]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
一对一 | has_one assoc_id [,opt]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
多对多 m:n |
has_and_belongs_to_many assoc_id [,
opt]
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
多对多2 m:n |
a---b---c这种情况下,直接关联a---c has_many assoc_id, through: middle_id [, opt] 例 b定义处 belongs_to :a belongs_to :c a定义处 has_many :b has_many :c through: :b c定义处 has_many :b has_many :a through: :b |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
由关联自动定义的方法 | p282~283 # TODO: 略 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
关联可用的opt |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
与相关model结合 |
joins(exp) 前提是已经建立association ● 参数是关联名(如has_one则为单数) ● 搜索时候套上的symbol是表格名 ● 2021/04/20 注: 是inner_join
cars = cars.includes(:equipment_spec).where(equipment_specs: request)
用join也能达到association的效果 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
与相关model结合 (左外部结合) Rails 5.0 |
left_outer_joins(exp) alias: left_joins(exp) 结合是左外部结合 LEFT OUTER JOIN 写法和上面一样, 但不能用C写法 ● 参数是关联名(如has_one则为单数) ● 搜索时候套上的symbol是表格名 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
和相关model一起获取 |
includes(exp) 写法一样,但不能用C写法 结合是左外部结合 LEFT OUTER JOIN 2021/04/20注 ● 不是结合,是多个select, 把所有把都拿出来 ● 参数是关联名(如has_one则为单数) ● 搜索时候套上的symbol是表格名 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
回调(call back) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
用例:注册时候每天的空白自动生成 注册或者更新时候自动发邮件 注册更新时保存为履历等 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
回调函数 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
主要方法 |
各时间点所对应函数
回调函数
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
迁移文件 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
位置 | app/db/migrate/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
生成migration文件 | 本页最上面找 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
构造 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
逻辑方法 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
主要方法 |
tname: table name frname: 外部table name fname: field name type: field的数据类型 opt: field的option i_opt: index option t_opt:table option fr_opt: foreign key option
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
create_table, change_table 代码块内可用的方法 |
create_table,change_table代码块内可用的方法 例: change_table tname do |t|
...
end
● 可用的方法
● 可用的列定义 t.数据类型 :列名, opt 可利用的数据类型和对应关系
选项opt
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
模型处改变迁移文件数据类型 | attribute(name, type [,default: value]) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
迁移文件的生成 | 和模型一起生成 rails generate model name field:type
[...] [options] 单独生成 rails generate migration name [field:type ...] [options] |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
删除或者增加列 | 生成迁移文件时候命名 rails g model AddXxxxTo表格名
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
升级与回滚 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
schema来构筑数据库 |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
数据库初始化 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
迁移和初始化一起 | rails db:setup 相当于 rails db:create:all rails db:migrate rails db:seed 或者 rails db:fixtures:load |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
seed file | 初始数据来初始化(也可以用fixture)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fixture | 测试数据来初始化(也可以用seed)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Data/Time相关的有用的方法 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
yesterday | 昨天 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tomorrow | 明天 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
prev_xxxx | 前年/月/周(year,month,week) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
next_xxxx | 下年/月/周(year,month,week) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
beginning_of_xxxx | 年/季/月/周的开始一天(year, quarter, month, day) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
end_of_xxxx | 年/季/月/周的最后一条(year, quarter, month, day) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
n.xxx.ago Numeric |
n个年/月/日/时/分/秒以前 years, months, days, hours, minutes, seconds 也可以用单数 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
n.xxx.from_now Numeric |
n个年/月/日/时/分/秒以后 years, months, days, hours, minutes, seconds 也可以用单数 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||