1 vài thay đổi cho Rails 5.1 Beta Version 1
Bài đăng này đã không được cập nhật trong 7 năm
Bản beta 1 của Rails đã được public chính thức ngày 23/2/2017 với sự thay đổi chủ yếu là trong việc quản lý các file javascript. 3 highline chính của Rails 5.1 tập trung thay đổi:
- Quản lý npm của JavaScript thông qua Yarn
- Compline JavaScript với Webpack
- Quay lại dùng Rails ajax mà không mặc định sử dụng jQuery nữa Ngoài ra, còn nhiều thay đổi khác nữa.
1. Thay đổi chính
1.1. Thay đổi về cấu trúc thư mục (Quản lý JavaScript thông bằng Yarn)
Rails 5.1 sinh ra file application.js trong forder packs trong asset/javascript không phải asset pipeline như rails 5
├── app │ └── javascript │ └── packs │ ├── app.vue │ ├── application.js │ └── hello_world.js ├── bin │ ├── webpack │ ├── webpack-dev-server │ ├── webpack-watcher │ └── yarn ├── config │ └── webpack │ ├── development.js │ ├── production.js │ └── shared.js ├── node_modules │ └── vue ├── package.json ├── public │ └── packs │ ├── application.js │ ├── application.js.map │ ├── hello_world.js │ └── hello_world.js.map └── yarn.lock
1.2 Biên dịch JavaScript bằng Webpack
Sử dụng gem webpacker, vẫn có thể sử dụng được asset pipeline cho : image, fonts,...Vừa có thể sử dụng asset pipeline và webpack để biên dịch các file này thông qua Yarn
1.3. Không mặc định sử dụng jquery ajax nữa
Khi cần sử dụng jquery thì bạn cần rails new blog -j jquery
2. Một vài thay đổi khác
*Test:
- Sử dụng gem Capybara trong quá trình test
- Bỏ ActionDispatch::Callbacks.to_prepare và ActionDispatch::Callbacks.to_cleanup
- Reset 1 session mới trong ActionDispatch::IntegrationTest#open_session
*Mã hóa bí mật
rails 5 | rails 5.1 |
---|---|
sử dụng RAILS_MASTER_KEY trong ENV | Sinh ra mã hóa bí mât bằng bin/rails secrets:setup |
*parameter mailer
- sinh ra trước khi gọi các action. có thể định nghĩa mặc định phần header to/from/reply_to
*pack
- custom url helper & polimorphic map url
- Sử dụng "remove_method" thay vì "undefine_method" khi load routes
- khai báo "resolve" song song với resource sử dụng cho polimorphic mapping model generates ra chính xác url từ form
VD: resource :user => "/user" resolve(class: "User") { [:user] } => "/user/:id"
- Khai báo "direct" để tạo routing DSL thay vì custom url
VD: direct(:pack) { "https://github.com/rails/rails/pull/23138/files" } khi gọi pack_url => "https://github.com/rails/rails/pull/23138/files"
- singular resource
routes 5.0 | rails 5.0 | rails 5.1 | routes 5.1 |
---|---|---|---|
profile | POST /profile(.:format) profiles#create | POST /profile(.:format) profiles#create | profile |
new_profile | GET /profile/new(.:format) profiles#new | GET /profile/new(.:format) profiles#new | new_profile |
** edit_profile ** | GET /profile(.:format) profiles#show | GET /profile(.:format) profiles#show | **profile ** |
edit_profile | GET /profile/edit(.:format) profiles#edit | GET /profile/edit(.:format) profiles#edit | edit_profile |
edit_profile | PATCH /profile(.:format) profiles#update | PATCH /profile(.:format) profiles#update | edit_profile |
edit_profile | PUT /profile(.:format) profiles#update | PUT /profile(.:format) profiles#update | edit_profile |
edit_profile | DELETE /profile(.:format) profiles#destroy | DELETE /profile(.:format) profiles#destroy | edit_profile |
- Thêm hash trong strong params
params.permit(preferences: {})
-
sử dụng ActionController::Parameters#merge!, thay cho Hash#merge!
-
muốn sử dụng to_param thì phải có to_h
-
thêm content cho flash ngay trong redirect
redirect_to messages_url, notice: 'Message was created'
- Hợp nhất form_for/form_tag với form_with
- trả về đúng tên obj trong method form sau fields_for
VD: > <%= form_with scope: :post, url: super_special_posts_path %>
giống với
> <%= form_with model: @post do |form| %>
> <%= form.text_field :title %>
> <% end %>
- thêm form fields
> <%= fields :comment, model: @comment do |fields| %> > <%= fields.text_field :title %> > <% end %> >
-
hiển thị chi tiết thông tin cache hit hoặc miss bằng cách config: config.action_controller.enable_fragment_cache_logging = true
-
syntax mới cho tag:
rails 5 | rails 5.1 |
---|---|
tag(:br, nil, true) | tag(:div, content_tag(:p, "Hello world!"), class: "strong") |
<%= tag :div, class: "strong" do %>Hello world!<% end %>tag.brtag.div tag.p("Hello world!"), class: "strong" | <%= tag.div class: "strong" do %>Hello world!<% end %> |
- Đổi datetime_field và datetime_field_tag thành datetime-local
- select_tag có thể blank VD: <option value="" label=" "></option>
*model
- return true cho update_attribute khi giá trị của attribute được update là không đổi
All rights reserved