Beta đầu Rails 4.2 công bố tuần trước, trông đã tuyệt vời. Tôi hào hứng dùng ActiveJob, Web Console, Adequate Record, Foreign Key support trong app.
Nhưng vẻ đẹp Rails nằm ở chi tiết. Và nếu đào sâu một chút, bạn tìm thấy feature ít quảng cáo hơn nhưng hoàn toàn cải thiện công việc hàng ngày với Rails.
Dễ dàng load config file
OK, tôi có thể biased. Nhưng có built-in way load config file sẽ tuyệt.
config_for, mới Rails 4.2, hoạt động như bạn kỳ vọng:
development:
host: localhost
port: 6379
test:
host: localhost
port: 6379
production:
host: redis-production
port: 6379
irb(main):001:0> Rails.application.config_for(:redis)
=> {"host"=>"localhost", "port"=>6379}
Tức, gọi config_for(:redis), nó tìm config/redis.yml trong Rails app, parse, trả config đúng RAILS_ENV.
Nó thậm chí cho ERB trong yaml:
development:
host: localhost
port: <%= ENV['REDIS_PORT'] %>
test:
host: localhost
port: <%= ENV['REDIS_PORT'] %>
production:
host: redis-production
port: <%= ENV['REDIS_PORT'] %>
$ REDIS_PORT=6380 bin/rails c
Loading development environment (Rails 4.2.0.beta1)
irb(main):001:0> Rails.application.config_for(:redis)
=> {"host"=>"localhost", "port"=>6380}
Nếu config nhiều service, initializer sẽ dễ đọc hơn.
Bootstrap app
Hầu hết Rails app cần chạy command trước khi thử. Rails app gần như trống vẫn cần database setup trước khi boot.
Vậy Rails, lại lần nữa convention over configuration, tạo nơi dành cho setup code: bin/setup.
Default đã tốt. Nhưng bin/setup cũng là nơi đặt code khác cần khởi động app.
Bây giờ đây là convention, nếu đã viết bootstrap script cho app, hãy đổi tên thành bin/setup, để người dùng app dễ bắt đầu.
bin/setup giảm một quyết định khi generate Rails app mới. Khi quen chạy bin/setup sau git pull, bạn không bao giờ nhớ chạy rake db:setup khi generate app mới.
Transform hash values
Đây là thứ tôi cần thường đủ để ước nó built-in Ruby. Khi gọi transform_values trên hash, nó giống gọi map trên value hash, trả hash mới với key gốc gắn value mới:
h = {a: 1, b: 2, c: 3}
h.transform_values { |v| v * 2 } # => {a: 2, b: 4, c: 6}
Đơn giản. Nhưng bạn ngạc nhiên nó tiện bao nhiêu.
Bonus: Thêm cấu hình!
Rails 4.2 cho cách đơn giản set global config riêng:
Rails.application.config.x.some_configuration_key = "Some Value"
Rails.application.config.x.some_configuration_key # => "Some Value"
Rails.configuration.x.some_configuration_key # => "Some Value"
Đặc biệt hay khi kết hợp với config_for:
app_config = Rails.application.config_for(:app)
Rails.application.config.x.block_phone_calls = app_config["block_phone_calls"]
Vẫn còn nhiều!
Rails 4.2 trông như release tuyệt vời. Nhưng những refinement nhỏ làm Rails vui mỗi ngày. Vậy, nếu chưa, lướt qua 4.2 Release Notes, xem improvement hữu ích nào khác bạn tìm được.
(Và nếu bạn thấy điều hay, đừng giấu. Chia sẻ đây, để mọi người cùng học!)