Home » Ruby Tutorial Box » Rails 4 vs Rails 3

Rails 4 vs Rails 3

rails_3_to_rails_4

I. Giới thiệu

1. Ruby

Ruby là ngôn ngữ lập trình hướng đối tượng do một tác giả người Nhật tên là Yukihiro Matsumoto phát triển vào khoảng giữa thập kỉ 90. Ruby có cú pháp đơn giản, dễ học, dễ nhớ, gần với tư duy logic thông thường. Phiên bản đầu tiên, Ruby 1.0 được công bố vào năm 1996. Tới nay, Ruby đã ra mắt phiên bản 2.0. Bạn có thể lập trình ngôn ngữ Ruby trên đa số các hệ điều hành, Windows, MacOS, Linux


2. Ruby on Rails

Rails là một framework để bạn lập trình web sử dụng ruby với nhiều thư viện liên kết (được gọi là các gem). Do cộng động Ruby on Rails rất lớn, và open source, nên bạn có rất nhiều các thư viện có sẵn, dễ dàng sử dụng. Một số đặc điểm của Rails như:
  • Cú pháp mềm dẻo, linh hoạt, ảo diệu và dễ học
  • Có riêng cú pháp truy cập cơ sở dữ liệu
  • Tiết kiệm thời gian với rails generate & scaffolding
  • Dễ dàng thực hiện TDD & BDD giúp nâng cao chất lượng sản phẩm, dễ dàng duy trì, cải thiện hệ thông nhờ khả năng kết hợp cùng RSpec & Cucumber
  • Được xây dựng dựa trên những nguyên lý cơ bản của software engineer patterns and principles như active record pattern, convention over configuration, don’t repeat your self, and model-view-controller
Về lịch sử ra đời:
  • Năm 2004, David Heinemeier Hansson công bố phiên bản đầu tiên của Rails.
  • Tháng 1 năm 2012, Rails 3.2, phiên bản ổn định được rất nhiều projects sử dụng. Rails 3.2 hỗ trợ ruby 1.8.7 tới Ruby 2.0.
  • Tháng 6 năm 2013, Rails 4.0 được công bố, hỗ trợ ruby 1.9.3 trở lên. Rails 4.0 khuyến nghị người dùng nên dùng ruby 2.0 trở lên

II. Rails 4 vs Rails 3

1. Database

Nếu bạn dùng PostgreSQL, hãy loại bỏ username ra khỏi file config database: database.yml, nếu không bạn sẽ gặp lỗi khi kết nối tới cơ sở dữ liệu. Một điểm nữa cần chú ý, bạn cần phải lưu kiểu mạng dưới dạng string.

Ví dụ:

2. Model

  • Rails 4 đã loại bỏ attr_accessibleattr_protected trong model. Nếu bạn vẫn muốn sử dụng nó, bạn có thể add gem protected attributes.
  • serialized_attributes attr_readonly cũng đã được chuyển thành class. Tức là bạn cần phải gọi tới class này khi muốn sử dụng.
  • before_filter => before_action. Sự thay đổi giúp feature này dễ hiểu hơn
  • Bạn cần loại bỏ các định nghĩa về field trong model hoặc project của bạn sẽ bị lỗi. Model lúc này chỉ bao gồm các validations, custom functions, call back, relations.

3. Syntax

  • scope :active, where(active: true) => scope :active, -> {where active: true}
  • PUT => PATCH. Đây được coi là sự thay đổi đáng kể trong syntax của Rails 4 so với Rails 3. Trong một số trường hợp cơ bản, PUT vẫn hoạt động, nhưng tốt hơn hết, bạn nên quen với PATCH
  • find_all_by => where(…)
  • find_last_by => where(…).last
  • scoped_by => where(…)
  • find_or_initialize_by_… => find_or_initialize_by(…)
  • find_or_create_by_… => find_or_create
Có một sự thay đổi trong Rails 4, những query trên không còn trả về một array, mà thay vào đó, nó sẽ trả về quan hệ cơ sở dữ liệu    để có thể thực hiện nối tiếp các query. Nếu bạn cần trả về một mảng, bạn có thể sử dụng to_a

4. Config

Để Rails 4 hoạt động khi upgrade từ Rails 3 Bạn cần thay đổi 1 số file config:
  • # config/initializers/secret_token.rb

  • #/config/application.rb

  • # /config/application.rb

  • # /config/test.rb

     
  • #/config/production.rb

5. Caching

  • Rails 4 đã loại bỏ action cachingpage caching. Bạn sẽ phải add Gem nếu tiếp tục muốn dùng
  • Rails 4 đã chuyển cache mặc định từ memcache-client thành Dalli. More about Dalli

6. Routes

Rails 4 có một số thay đổi về qui ước viết routes. Có 2 cách định nghĩa routes như sau:

7. Gemfile

  • Rails 4 đã loại bỏ group assets ra khỏi Gemfile
  • Bạn cần chú ý nếu có ý định update từ Rails 3 lên Rails 4: Phải chắc chắn các gem bạn đang dùng có hỗ trợ Rails 4

8. Parameter

  • Rails 3 cho phép bạn truyền ngắn params[:user] lên và controller sẽ tự động nhận mọi field mà bạn truyền lên. Nếu bạn muốn loại bỏ field nào, bạn phải remove thủ công params[:user].delete(….).
  • Trong Rails 4, việc truyền params được giới hạn để không nhận params nil, cũng như giới hạn các params