12/08/2018, 13:51

Alias và Alias_method trong Rails

Alias và Alias_method được sử dụng để tạo ra các bí danh(aliases) cho các phương thức hoặc tên thuộc tính trong ruby. Bạn vẫn có thể gọi phương thức bằng tên cũ của chúng như bình thường, alias và alias_method cung cấp cho phương thức một định danh thứ 2 để khi bạn gọi đến nó, kết quả việc gọi ...

Alias và Alias_method được sử dụng để tạo ra các bí danh(aliases) cho các phương thức hoặc tên thuộc tính trong ruby. Bạn vẫn có thể gọi phương thức bằng tên cũ của chúng như bình thường, alias và alias_method cung cấp cho phương thức một định danh thứ 2 để khi bạn gọi đến nó, kết quả việc gọi phương thức bằng 2 cái tên khác nhau là như nhau

class UsersController < Application_Controller
  def full_name
    puts self.name
  end

  #Option 1:
  alias :name :full_name
  #Option 2:
  alias_method :name, :fullname
end

User.new.name => #user's name

# You mush define method before you can use alias or alias_method

So sánh

alias_method: chấp nhận các tham số truyền vào dưới dạng tring hoặc symbol và sử dụng dấu "," để tách giữa 2 tham số

alias: chỉ chấp nhận symbol là tham số và không sử dụng ","

class Parent
  def method
    puts "parent"
  end
    #Option 1:
    alias :operation :method
    #Option 2:
    alias_method :operation, :method

end

class Child < Parent
  def method
  	puts "children"
  end
end

#Option 1:
Parent.operation => #parent
Child.operation => #parent

#Option 2:
Parent.operation => #parent
Child.operation => #children

Điểm khác biệt lớn nhất giữa alias và alias_method là phạm vi trong việc thực hiện.

Như ở ví dụ trên khi gọi tới hàm operation định nghĩa bởi alias ở trong lớp kế thừa Child, kết quả trả về vẫn là của hàm trong lớp Parent.

Trong khi đó nếu sử dụng alias_method, việc gọi tới method operation trong 2 lớp Parent và Child sẽ trả về 2 kết quả khác nhau.

=> Việc sử dụng alias và alias_method tùy vào mục đích của lập trình viên. Mặc dù vậy alias_method linh hoạt hơn và cho phép chúng ta override phương thức trong các lớp con, vì vậy thường được sử dụng trong plugins, extensions, deprecating variables để duy trì tính tương thích với các hệ thống cũ

0