数据库潜规则
▪ 数据库表名:复数,下划线分隔单词(例如 book_clubs) ▪ 模型类名:单数,每个单词的首字母大写(例如 BookClub)
▪ 外键:使用 singularized_table_name_id 形式命名,例如 item_id,order_id。创建模型关联后,Active Record 会查找这个字段;
▪ 主键:默认情况下,Active Record 使用整数字段 id 作为表的主键。使用 Active Record 迁移创建数据 库表时,会自动创建这个字段;
▪ created_at:创建记录时,自动设为当前的日期和时间;
▪ updated_at:更新记录时,自动设为当前的日期和时间;
▪ lock_version:在模型中添加乐观锁; _
▪ type:让模型使用单表继承;
▪ (association_name)_type:存储多态关联的类型;
▪ (table_name)_count:缓存所关联对象的数量。比如说,一个 Article 有多个 Comment,那么 com- ments_count 列存储各篇文章现有的评论数量;
其他命名潜规则
▪ 类名、模块名和常量应该用大写字母开头
▪ @ 后面不可以直接跟 数字
Grape api response body :present
[https://ruby-china.org/topics/21214]
{
code: 1000,
msg: "OK",
data: {
// normal data goes here if exists
}
}
present :items, Book.all, with: Entities::Book
attr_accessor
是创建变量的可读可写属性
raise LogicError
throw new LogicError
camelize
'active_record'.camelize # => "ActiveRecord"
rescue 异常捕获
[https://ruby-china.org/topics/9351]
感叹号
[https://github.com/quanzhanying/fullstack-course/wiki/%E5%85%B3%E4%BA%8E-Ruby-%E6%96%B9%E6%B3%95%E5%90%8D%E5%90%8E%E7%9A%84%E9%97%AE%E5%8F%B7%E5%92%8C%E6%84%9F%E5%8F%B9%E5%8F%B7] 方法名后面加感叹号是 Ruby 的编码风格规范,用来表示该方法会去修改对象本身,Ruby 会把带有感叹号的方法称为危险的方法,因为程序中可能有其他地方会引用这个对象。但是并不会强制该方法一定要修改对象本身。
find_by/find_by! find_by:假设不存在返回nil_ find_by!:假设不存在抛出异常_
语法
[https://www.jianshu.com/p/e0374c038dda]
Rails MVC
(Ruby on Rails教程 中文版)
路由
ActionDispatch::Routing::Mapper::HttpHelpers 中定义了在route里可以设置的5种HTTP via get 'bacon', to: 'food#bacon’ post 'bacon', to: 'food#bacon’ patch 'bacon', to: 'food#bacon’ put 'bacon', to: 'food#bacon’ delete 'broccoli', to: 'food#broccoli’
最终调用的还是match方法 match 'path' => 'controller#action', via: patch match 'path', to: 'controller#action', via: :post match 'path', 'otherpath', on: :member, via: :together
缓存
- ActiveRecord层缓存 在rails的model层中可以手动缓存某些业务结果到对应的缓存存储系统里。
Rails.cache.fetch(key, expires_in: 1.hour) do
....
end
object#try 对潜在的 Rails 中的 nil 调用方法-来源
nil.send(:downcase)
NoMethodError: undefined method `downcase' for nil:NilClass
nil.try(:downcase)
=> nil