12/08/2018, 17:44

RAILS VIRTUAL ATTRIBUTES

Hôm nay mình giới thiệu với các bạn cách tạo virtual attribute đơn giản cho rails Giả sử ta có table user có 2 column là first_name và last_name, để tạo table user ta chạy câu lệnh migrate như sau: rails g modal user first_name:string last_name:string Khi đó, để đăng ký mới user, người ...

Hôm nay mình giới thiệu với các bạn cách tạo virtual attribute đơn giản cho rails

  • Giả sử ta có table user có 2 column là first_name và last_name, để tạo table user ta chạy câu lệnh migrate như sau:
    rails g modal user first_name:string last_name:string
    
  • Khi đó, để đăng ký mới user, người dùng cần điền 2 field trên form đăng ký người dùng ứng với 2 cột first_name và last_name.
  • Để tiện cho người dùng, ta sử dụng virtual_attribute full_name thay thế cho 2 attribute first_name và last_name
  • Trong file model user.rb, ta khai báo các getter và setter cho virtual_attribute full_name

    class User < ApplicationRecord
      def full_name
        [first_name, last_name].join(" ")
      end!
    
      def full_name=(name)
        first_name_and_last_name = name.split(" ")
        update_attributes first_name: first_name_and_last_name[0]
        update_attributes last_name: first_name_and_last_name[1]
      end
    end
    
  • Sử dụng rails console để kiểm tra các setter và getter của virtual_attributes full_name.

  • Kết quả như sau:

    Tạo user sử dụng attribute first_name là last_name như bình thường

    Tạo user sử dụng virtual attribute full_name

  • Để thực hiện validates cho virtual_attribute, ta thực hiện tương tự như khi validate cho các attribute bình thường.

  • Trong ví dụ như sau, thực hiện validates full_name với min length là 10 kí tự, first_name, last_name phải tồn tại

    validates :first_name, presence: true
    validates :last_name, presence: true
    validates :full_name, length: {minimum: 10}
    
  • Sử dụng rails console để kiểm tra các validation vừa được tạo

  • Kết quả như sau:

    Tạo user không có first_name:

    Tạo user không có last_name:

    Tạo user có full_name ngắn hơn 10 kí tự:

  • Từ đây ta có thể sử dụng virtual_attribute full_name như 1 attribute bình thường trong các hàm new, create, update, validates ... như các attribute first_name, last_name.

0