主要更新包括:
1、Action Mailbox 集成
2、Action Text 以 Trix editor 为基础的富文本编辑器
3、new multiple database support 多数据库支持
4、parallel testing support 并行测试
5、Webpacker 现在默认做为 js 的打包工具,不过还是用 Sprockets 进行图片和 css 的处理
6、其它一些比如:Action cable testing, Action Cable JavaScript 使用 es6 重写等
7、Rails 6.0 要求 Ruby 2.5.0+
更多详细的可以看CHANGELOG
其中有几个对我自己有帮助的更新:
1、Active Storage 如下代码@user.avatar = params[:avatar]
,现在只有在@user保存成功后才会保存图片。
2、添加了一个implicit_order_column
, 在我们使用 Model.first 或者 Model.last 时,是以主键做为排序的,不过如果主键是 uuid 等,可能得不到我们想要的结果,有了这个可以加上如下代码
class Project < ActiveRecord::Base
self.implicit_order_column = "created_at"
end
3、has_secure_password
现在支持自定义名称,比如
class User < ActiveRecord::Base
has_secure_password :recovery_password, validations: false
end
user = User.new()
user.recovery_password = "42password"
user.recovery_password_digest # => "$2a$04$iOfhwahFymCs5weB3BNH/uX..."
user.authenticate_recovery_password('42password') # => user
4、delegate
添加了private
选项
class User < ActiveRecord::Base
has_one :profile
delegate :date_of_birth, to: :profile, private: true
def age
Date.today.year - date_of_birth.year
end
end
# User.new.age # => 29
# User.new.date_of_birth
# => NoMethodError: private method `date_of_birth' called for #<User:0x00000008221340>
5、create_table
添加了:if_not_exists
选项
create_table :posts, if_not_exists: true do |t|
t.string :title
end
6、添加了Relation#pick
,
以前这么写
Post.where(category: "Rails 6").limit(1).pluck(:name).first
现在可以
Post.where(category: "Rails 6").pick(:name)
7、多数据库支持,我平时没怎么用到,看了下,主要有两个 api
(1) connects_to
,在 model 中连接多数据库
class AnimalsModel < ApplicationRecord
self.abstract_class = true
connects_to database: { writing: :animals_primary, reading: :animals_replica }
end
class Dog < AnimalsModel
# connected to both the animals_primary db for writing and the animals_replica for reading
end
(2) ActiveRecord::Base.connected_to
方法,可以使用role
来连接已经在 model 中定义的连接,比如
class Book < ApplicationRecord
end
ActiveRecord::Base.connected_to(role: :reading) do
Dog.first # 在AnimalsModel中定义了`reading: animals_replica`,可查找记录
Book.first # 没有定义reading,报错
end
也可以使用database
连接在database.yml
中定义过的数据库
ActiveRecord::Base.connected_to(database: :slow_replica) do
SlowReplicaModel.first #如果在`database.yml`中定义了`slow_replica`数据库,那可以查找,否则报错
end
不过ActiveRecord::Base.connected_to
可以接受 hash 或者 url configs,
User.connected_to(database: { writing: "postgres://foo" }) do
User.create!(name: "Gannon")
end
config = { "adapter" => "sqlite3", "database" => "db/readonly.sqlite3" }
User.connected_to(database: { reading: config }) do
User.count
end