Каков наилучший способ создания псевдонимов для атрибутов в Ruby? - PullRequest
18 голосов
/ 27 мая 2009

Каков наилучший способ создания псевдонима для атрибута экземпляра в Ruby (я не использую rails или любой гем ruby, просто Ruby). Например, учитывая приведенный ниже класс, как я могу создать псевдоним для атрибутов доступа :student_name?

class Student
  attr_accessor :student_name
  alias :name :student_name    #wrong
end

s = Student.new
s.student_name = "Jordan"
puts s.name  # --> Jordan
s.name = "Michael" # --> NoMethodError: undefined method `name=' for #<Student:0x572394> ...

Спасибо, ребята!

Ответы [ 3 ]

29 голосов
/ 27 мая 2009

добавить

alias :name :student_name    # not wrong, only for getter
alias :name= :student_name=  # add this for setter
13 голосов
/ 27 мая 2009

Как указывает Джон, вам нужно использовать псевдоним как читателя, так и писателя. Это Ruby, поэтому довольно легко определить собственный метод псевдонима, чтобы справиться с этим за вас.

class Module
  def attr_alias(new_attr, original)
    alias_method(new_attr, original) if method_defined? original
    new_writer = "#{new_attr}="
    original_writer = "#{original}="
    alias_method(new_writer, original_writer) if method_defined? original_writer
  end
end
10 голосов
/ 30 января 2017

для рельсов

alias_attribute new_name, old_name

Источник http://api.rubyonrails.org/classes/ActiveModel/AttributeMethods/ClassMethods.html#method-i-alias_attribute

Вариант использования: Когда вы, скорее всего, хотите изменить имя атрибута без изменения схемы и без нарушения существующей функциональности

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...