Có gì mới trong Rails 5.1

Rails 5.1 đã công bố bản beta vào khoảng đầu tháng 3, trong đó giới thiệu một số tính năng bổ ích giúp mọi người dễ dàng làm việc với Java script trong ứng dụng Rails của họ.Dưới đây ta hãy cùng tìm hiểu một số tính năng mới của phiên bản này:

Ruby Version

Yêu cầu Ruby version tối thiểu là 2.3.1 và lớn hơn

Không còn những Rake commands thông dụng nữa

Khi chúng ta muốn chạy migrate trong Rails 4 thì chúng ta dùng lệnh: rake db:migrate .Đối với Rails 5.1, dòng lệnh ấy sẽ trở thành: rails db:migrate .Trong Rails 5.1, những dòng lệnh rake hiện tại sẽ được chuyển tương ứng sang rails commands. Và bây giờ, chúng ta có thể restart lại toàn bộ ứng dụng bằng cách chạy rake restart .

App Server

Trong Rails 5.1 , Puma server được định nghĩa mặc định trong Gemfile:

Yarn Support

Yarn giống như Bundler để quản lý Javascript từ NPM.Với nó, chúng ta có thể dễ dàng sử dụng các thư viện như React, VueJS hay bất cứ thư viện nào khác từ NPM.Nó được tích hợp với Asset pipeline sao cho tất cả các phụ thuộc sẽ hoạt động trơn tru trong bản 5.1.

Webpacker Support

Webpack có thể được sử dụng để biên dịch Javascript qua việc sử dụng gem Webpacker .Nó được sử dụng để quản lí các Modules và dependencies.Nếu ta đang ở một ứng dụng single page , chúng ta có thể dễ dàng thiết lập React, Angular và Vue.js. Để start một Rails/React project, ta có thể dùng lệnh dưới đây:

rails new single_page --webpack=react

form_with

bây giờ, ta có thể sử dụng form_with để thay cho cả form_for và form_tag:

# Instead of form_for
<%= form_with model: @post do |form| %>
  <%= form.text_field :title %>
<% end %>

# Instead of form_tag
<%= form_with scope: :post, url: posts_path do |form| %>
  <%= form.text_field :title %>
<% end %>

System tests với Capybara

Ở phiên bản này Rails sẽ có ActionDispatch::IntegrationTest cho phép ta sử dụng Capybara để thực hiện integration tests, mà không cần phải sử dụng bất kỳ config nào khác..Mặc định, trình duyệt chrome được sử dụng để thực hiện việc test, ta có thể config để sử dụng trình duyệt khác cho việc này.Ví dụ:

require 'application_system_test_case'

class Users::CreateTest < ApplicationSystemTestCase
  test "adding a new user" do
    visit users_path
    click_on 'New User'

    fill_in 'Name', with: 'Arya'
    click_on 'Create User'

    assert_text 'Arya'
  end
end

định nghĩa exception cho ActiveJob

Ví dụ:

class RemoteServiceJob < ActiveJob::Base
  retry_on CustomAppException # defaults to 3s wait, 5 attempts
  retry_on AnotherCustomAppException, wait: ->(executions) { executions * 2 }
  retry_on ActiveRecord::Deadlocked, wait: 5.seconds, attempts: 3
  retry_on Net::OpenTimeout, wait: :exponentially_longer, attempts: 10

  def perform(*args)
    # ...
  end
end

Parameterized mailers

ActionMailer::Parameterized cung cấp phương pháp để setup với before_action, bằng cách truyền parameters vào method:

InvitationMailer.with(invitee: foo).account_invitation.deliver_later

class InvitationMailer < ApplicationMailer
  before_action { @invitee = params[:invitee] }

  def account_invitation
    mail to: @invitee.email, # ...
  end
end

Tag helper

ActionView tag helper được thay đổi lại như sau:

# Old
tag('div', class: 'foo')

# New
tag.div('Hello, world!', class: 'foo')
tag.div tag.p('Hello world!')

Encrypted secrets

Trước đây, để lưu giữ các biến cần bảo mật ta thường sử dụng ENV.Tuy nhiên, bây giờ, ta có thể setup một file có thể check các biến từ mã nguồn.Ta sẽ có một master key, đóng gói ngoài repo có thể dùng để giải mã các key.

Tham khảo

http://edgeguides.rubyonrails.org/5_1_release_notes.html http://nithinbekal.com/posts/rails-5.1-features/ https://www.railscarma.com/blog/technical-articles/whats-new-rails-5-1/