Ответ 1
добавить
alias :name :student_name # not wrong, only for getter
alias :name= :student_name= # add this for setter
Каков наилучший способ создания псевдонима для атрибута экземпляра в 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> ...
Спасибо, ребята!
добавить
alias :name :student_name # not wrong, only for getter
alias :name= :student_name= # add this for setter
Как указывает Джон, вам нужно написать псевдоним и читателю, и писателю. Это 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
Для Rails
alias_attribute new_name, old_name
Случай использования:. Когда вы, скорее всего, захотите изменить имя атрибута без изменения схемы и без нарушения существующей функциональности