12/08/2018, 13:59

Cơ bản về kĩ thuật View Object trong ruby on rails

Xin chào các bạn, hôm nay mình xin được giới thiệu một kĩ thuật dùng để tối ưu code, đó chính là chỉ truyền tối đa 2 biến instance variable sang view, gọi là kĩ thuật View Object. Ví dụ trong users_controller.rb: class UsersController < ApplicationController def edit @user = ...

Xin chào các bạn, hôm nay mình xin được giới thiệu một kĩ thuật dùng để tối ưu code, đó chính là chỉ truyền tối đa 2 biến instance variable sang view, gọi là kĩ thuật View Object.

Ví dụ trong users_controller.rb:

class UsersController < ApplicationController
    def edit
        @user = User.find_by id: params[:id]
        @genders = User.genders
        @languages = User.languages
    end
end

=> bạn truyền 3 biến @user, @genders và @languages ra view.

Đầu tiên, ở đây mình sử dụng với đối tượng là User. thì trong folder models tạo một folder với tên là supports.

Trong folder supports đó mình sẽ tạo ra các file với tên tương ứng với model hoặc có thể đặt tên theo ý mình muộn gọi ra với các thuộc tính của chủ thế đó, Ví dụ mình có thể tạo file với tên là user.rb hoặc profile_user.rb...

Bây giờ mình sẽ hướng dẫn các bạn cách triển khai kĩ thuật này, về cơ bản nội dung file user.rb sẽ như sau:

class Supports::User
  attr_reader :user

  def initialize user #Hàm khởi tạo biến user
    @user = user
  end

  def genders #Hàm để mình lấy ra những thuộc tình để truyền sang view
    @genders ||= User.genders
  end #ngoài ra có thể thêm nhiều hàm khác với mỗi thứ mình
  def languages
    @languages ||= User.languages
  end
end

Đã xong việc triển khai nội dung của file supports, giờ trong controller của user (users_controller.rb) gọi:

@supports = Supports::User.new @user

=> biến supports chính là biến instance thứ 2 để mình truyền vào view

Trong view mình sẽ gọi như sau để lấy ra thứ mình muốn:

@supports.genders #tương ứng với @genders
@supports.languages #tương ứng với @languages

Trên đây là bài giới thiệu cơ bản về kĩ thuật View Object của mình, các bạn có thể comment để hỏi mình thêm nếu không cấu hình được, nếu mình không đủ kĩ năng để trả lời mình sẽ cố gắng hỏi người khác để có câu trả lời cụ thể cho các bạn.

0