Tìm hiểu về module ActiveModel

1. Khái niệm:

  • Active Model là một thư viện chứa các modules khác nhau được sử dụng trong phát triển các class nhằm cung cấp các chức năng tương tự như Active Record.

2. Chức năng:

  • Thông thường đa số model phải lưu trữ dữ liệu vào db nhờ ActiveRecord, nhưng trong một số trường hợp chúng ta không cần lưu trữ dữ liệu mà vẫn cần các chức năng của Active Record như tạo form,... thì sẽ dùng Active Model để thực hiện.

3. Các Module của Active Model:

ActiveModel::Model: Module mặc định của AM cung cấp các phương thức cơ bản cho model tương tác với action pack.

  • Trong module có phương thức initialize để khởi tạo object và assign các attribute.

ActiveModel::AttributeMethods: Thêm các tiền tố và hậu tố cho các phương thức của class, được thực hiện bởi các phương thức:

  • attribute_method_suffix
  • attribute_method_prefix
  • attribute_method_affix
  • alias_attribute
  • define_attribute_methods
  • undefine_attribute_methods

ActiveModel::Callbacks: Include module Callbacks của ActiveSupport để sử dụng được các hàm definde_callback, set_callback, run_callback với các phương thức trong model của activemodel --> Các class của active model cũng có callback như Active Record.

ActiveModel::Dirty: Cung cấp các hàm để track thay đổi của object

ActiveModel::Naming: Cung cấp phương thức model_name, phương thức này return object của ActiveModel::Name và các phương thức để tương tác với tên của object

ActiveModel::Validations: Cung cấp đầy đủ các phương thức validate cho đối tượng tương tự như của active record.

ActiveModel::ActiveModel: Translation: tích hợp object với i18n framework

ActiveModel::Serializers: Cung cấp phương thức as_json và from_json.

  • as_json: trả lại các đối tượng dưới dạng hash
  • from_json: tạo các thuộc tính của đối tượng từ chuỗi json.

ActiveModel::Conversion

  • Dùng để xử lý chuyển đổi mặc định bằng các phương thức: to_key(), to_model(), to_param() và to_partial_path()
  • to_key() Trả về một mảng gồm tất cả các key của thuộc tính nếu thuộc tính đó được thiết lập. Trả về nil nếu không có thuộc tính nào được thiết lập.

  • to_model() Nếu đối tượng đã được khởi tạo thì có thể dùng to_model để trả về chính đối tượng đó.

  • to_param() Trả về một chuỗi là khóa của đối tượng để sử dụng trong URL, khóa của đối tượng có thể là id của đối tượng trong db.

  • to_partial_path() Trả về một chuỗi là đường dẫn các file partial của đối tượng.

ActiveModel::SecurePassword

  • Có chức năng để lưu trữ an toàn tất cả các mật khẩu đã được mã hóa.
  • Có 2 module con: ActiveModel::SecurePassword::ClassMethods và ActiveModel::SecurePassword::InstanceMethodsOnActivation
    • ActiveModel::SecurePassword::ClassMethods .Khi thêm phương thức has_secure_password thuộc module này, nó cung cấp để định nghĩa một mật khẩu xác nhận hợp lệ. .ActiveModel::SecurePassword phụ thuộc vào bcrypt(chức năng mã hoá mật khẩu), vì vậy để sử dụng model này một cách hiệu quả thì cần phải thêm gem bcrypt vào Gemfile. .Nó cung cấp một số chức năng như:
      • Mật khẩu phải tồn tại.
      • Mật khẩu phải khớp với phần xác nhận mật khẩu.
      • Mật khẩu không được vượt quá 72 ký tự.
    • ActiveModel::SecurePassword::InstanceMethodsOnActivation . Phương thức authenticate: Sẽ trả về self nếu mật khẩu đúng, nếu sai thì sẽ trả về false. . Phương thức password: Sẽ mã hóa mật khẩu khi được nhập, và chỉ thực hiện khi mật khẩu không được rỗng . Phương thức password_confirmation: Thực hiện chức năng xác nhận lại mật khẩu.

ActiveModel::Serialization

  • Dùng để truy xuất các thuộc tính của đối tượng một cách tuần tự bằng serializable_hash. serializable_hash sẽ trả về một mảng hash các giá trị thuộc tính của đối tượng

ActiveModel::Lint

  • Cung cấp các chức năng để kiểm tra đối tượng như: test_errors_aref, test_model_naming, test_persisted?, test_to_key, test_to_param, test_to_partial_path